간단한 golang 으로 만든 웹페이지 입니다.
프로젝트 폴더위치 및 패키지 위치에 따른 오류는 본인의 환경에 맞게 수정이 필요함.
./main.go
package main
import (
"GO/tuckersGo/goWeb/web04/myapp" // 개인 패키지 위치이므로 본인에 맞게 수정할것
"net/http"
)
const portNumber = ":3000"
func main() {
mux := myapp.NewHttpHandler()
http.ListenAndServe(portNumber, mux)
}
./myapp/app.go
package myapp
import (
"encoding/json"
"fmt"
"net/http"
"time"
)
type User struct {
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
Email string `json:"email"`
CreatedAt time.Time `json:"created_at"`
}
func indexHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello World")
}
type fooHandler struct{}
func (f *fooHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
user := new(User)
// request 에서 값을 가져와서 디코딩후 user 형태로 변환.
err := json.NewDecoder(r.Body).Decode(user)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
fmt.Fprint(w, "Bad Request: ", err)
return
}
user.CreatedAt = time.Now()
data, _ := json.Marshal(user)
// content type 을 json 으로 보내면 클라이언트에서 보기 좋게 표시됨
w.Header().Add("content-type", "application/json")
w.WriteHeader(http.StatusCreated)
fmt.Fprint(w, string(data))
}
func barHandler(w http.ResponseWriter, r *http.Request) {
name := r.URL.Query().Get("name")
if name == "" {
name = "World"
}
fmt.Fprintf(w, "Hello name: %s!", name)
}
func NewHttpHandler() http.Handler {
// 인스턴스를 만들고 해당 인스턴스에 등록해서 사용하는 예제 코드.
mux := http.NewServeMux()
mux.HandleFunc("/", indexHandler)
mux.HandleFunc("/bar", barHandler)
mux.Handle("/foo", &fooHandler{})
return mux
}
http://localhost:3000/ 접속시 indexHandler 호출 > 화면에 Hello World 출력함.
http://localhost:3000/bar 접속시 barHandler 호출 > URL 쿼리가 없으면 기본설정인 Hello name: World! 출력.
> URL 쿼리가 있으면 해당 정보를 출력
http://localhost:3000/foo 접속시 fooHandler 호출 > json 데이터 출력함.
테스트를 위해서 크롬 확장판 설치필요함 > Advanced REST client 설치 필요함.
'GO lang > web' 카테고리의 다른 글
[GO] Todo list - interface 구현1 (0) | 2021.11.18 |
---|---|
[GO] Todo list - refactoring(구조변경) (0) | 2021.11.17 |
[GO] Todo list - map 자료구조 (0) | 2021.11.17 |
[GO] Web - Restful API, TDD (0) | 2021.11.04 |
[GO] Web - 테스트 코드 작성방법(TDD) (0) | 2021.11.04 |