- 준비하기
- urfave/negroni 패키지 설치
- unrolled/render 패키지 설치
- 웹서버만들기
- 프론트엔드 만들기
- 웹배포방법 고려하기
- 헤로쿠로 배포하기
준비하기
- urfave/negroni 패키지 설치
- negroni 패키지는 net/http를 직접적으로 이용할 수 있도록 디자인된 미들웨어 중심의 라이브러리이다.
- https://github.com/urfave/negroni/blob/master/translations/README_ko_KR.md
아래 명령으로 해당 패키지를 설치한다.
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>
웹서버만들기
프론트엔드 만들기
웹배포방법 고려하기
헤로쿠로 배포하기
'Go' 카테고리의 다른 글
Go 채팅서버 (0) | 2024.03.30 |
---|---|
Go 웹서버관련 - Render, Pat, Negroni (0) | 2024.03.25 |
[묘공단] Tucker의 Go 언어 프로그래밍 30장 : RESTful API 서버 만들기 (0) | 2024.03.22 |
[묘공단] Tucker의 Go 언어 프로그래밍 29장 : Go언어로 만드는 웹서버 (0) | 2024.03.16 |
[묘공단] Tucker의 Go 언어 프로그래밍 26장 : 단어검색프로그램 (0) | 2024.03.09 |