Open3
今更ながらGoのお勉強
API設計する課題で学ぶGo
構造体を書く時
- 型定義後ろに書くの何気に新鮮
- MarshalってのでJSONへのシリアライズできるんだとか(JSONにパース?された時に)
https://pkg.go.dev/encoding/json#Marshal
model.go
type HealthzResponse struct{
Message string `json:"message"`
Number int `json:",omitempty"`
}
オプションとかでomitempty
とかだと値が入ってなかった時に無視されたり,-
だとパースする時に無視させたりできるらしい
今回はnet/httpのみでつくっていく?予定
httpサーバーは大体(1)サーバー立てる(2)エンドポイント作る(3)ハンドラを書くって感じの流れなので順番にこんな感じ?
// (3)
type Handler struct{}
func NewHandler() *Handler{
return &Handler{}
}
func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {}
// (2)
mux := http.NewServeMux()
mux.Handle("/endpoint", NewHandler())
// (1)
server := http.Server{
Addr: port,
Handler: mux,
}
(3)についてはなんでこんなやり方なのかわかっていない
後に調べるとして現在検討ついているのはServeHTTPがHttpHandlerの子だから崩さないように
NewHandlerがいるのか?という感じ
structの埋め込み
structを埋め込んで構造体を再利用できる
type (
TODO struct{
ID int `json:"id"`
Subject string `json:"subject"`
Description string `json:"description"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
CreateResponse struct{
TODO `json:"todo"`
}
)