본문 바로가기

Go

[묘공단] Tucker의 Go 언어 프로그래밍 31장 : Todo 리스트 웹사이트 만들기

  • 준비하기
    • urfave/negroni 패키지 설치
    • unrolled/render 패키지 설치
  • 웹서버만들기
  • 프론트엔드 만들기
  • 웹배포방법 고려하기
  • 헤로쿠로 배포하기

 

 

 

 

준비하기

 

 

아래 명령으로 해당 패키지를 설치한다.

go get github.com/urfave/negroni

 

 

package main

import (
	"fmt"
	"net/http"

	"github.com/urfave/negroni"
)

func main() {
	mux := http.NewServeMux()
	mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
		fmt.Fprintf(w, "Welcome to the home page!")
	})

	n := negroni.Classic() // 기본 미들웨어들을 포함합니다
	n.UseHandler(mux)

	http.ListenAndServe(":3000", n)
}

 

 

 

 

 

 

 

 

 

  • unrolled/render 패키지 설치

 

go get github.com/unrolled/render

 

 

 

// main.go
package main

import (
    "net/http"

    "github.com/urfave/negroni"
    "github.com/unrolled/render"
)

func main() {
    r := render.New(render.Options{
        IndentJSON: true,
    })
    mux := http.NewServeMux()

    mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
        r.JSON(w, http.StatusOK, map[string]string{"welcome": "This is rendered JSON!"})
    })

    n := negroni.Classic()
    n.UseHandler(mux)
    n.Run("127.0.0.1:8080")
}

 

 

 

 

 

 

 

 

 

 

 

  • 다른 예제
// main.go
package main

import (
	"encoding/xml"
	"net/http"

	"github.com/unrolled/render"
)

type ExampleXml struct {
	XMLName xml.Name `xml:"example"`
	One     string   `xml:"one,attr"`
	Two     string   `xml:"two,attr"`
}

func main() {
	r := render.New()
	mux := http.NewServeMux()

	mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
		w.Write([]byte("Welcome, visit sub pages now."))
	})

	mux.HandleFunc("/data", func(w http.ResponseWriter, req *http.Request) {
		r.Data(w, http.StatusOK, []byte("Some binary data here."))
	})

	mux.HandleFunc("/text", func(w http.ResponseWriter, req *http.Request) {
		r.Text(w, http.StatusOK, "Plain text here")
	})

	mux.HandleFunc("/json", func(w http.ResponseWriter, req *http.Request) {
		r.JSON(w, http.StatusOK, map[string]string{"hello": "json"})
	})

	mux.HandleFunc("/jsonp", func(w http.ResponseWriter, req *http.Request) {
		r.JSONP(w, http.StatusOK, "callbackName", map[string]string{"hello": "jsonp"})
	})

	mux.HandleFunc("/xml", func(w http.ResponseWriter, req *http.Request) {
		r.XML(w, http.StatusOK, ExampleXml{One: "hello", Two: "xml"})
	})

	mux.HandleFunc("/html", func(w http.ResponseWriter, req *http.Request) {
		// Assumes you have a template in ./templates called "example.tmpl"
		// $ mkdir -p templates && echo "<h1>Hello {{.}}.</h1>" > templates/example.tmpl
		r.HTML(w, http.StatusOK, "example", "World")
	})

	http.ListenAndServe("127.0.0.1:3000", mux)
}

 

 

 

<!-- templates/example.tmpl -->
<h1>Hello {{.}}.</h1>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

웹서버만들기

 

프론트엔드 만들기

 

 

웹배포방법 고려하기

 

 

헤로쿠로 배포하기