以前書いた以下のエントリーからさらい一歩進めました。
内容は net/http かgorilla/mux を使ってroutingを作る超薄いAPIサーバーを作成する際にこれだけコピれば簡単にapiサーバーを立てることができるみたいなものを作ることです。
rubyでいうsinatra的なものを作りたかった感じです。
net/httpを使うパターン
ディレクトリ構造
go_diet_api_skelton
src
go_diet_api_skelton
handler/
root.go
web/
router.go
main.go
実際のコードは以下
/ にアクセスしてみる
$ curl -i http://localhost:8080 土 12/23 09:51:22 2017 HTTP/1.1 200 OK Date: Sat, 23 Dec 2017 00:51:33 GMT Content-Length: 11 Content-Type: text/plain; charset=utf-8 Hello World
goの標準機能だけで作成するどシンプルなAPIサーバーだと思います。
goの net/http が非常にシンプルで強力なので、正直これくらいシンプルな方がいいのではと思います。
gorilla/muxを使う
ディレクトリ構造
※ ディレクトリ構造は同じ
go_diet_api_skelton
src
go_diet_api_skelton
handler/
root.go
web/
router.go
main.go
gorilla/mux を入れる。
$ dep ensure -add github/gorilla/mux
実際に書いたコードは以下
/ にアクセスしてみる
$ curl -i http://localhost:8080 土 12/23 09:51:22 2017 HTTP/1.1 200 OK Date: Sat, 23 Dec 2017 00:51:33 GMT Content-Length: 11 Content-Type: text/plain; charset=utf-8 Hello World
gorillaの方が以下のような感じで、routingでmethod等を指定できるので便利です。
m.HandleFunc("/", handler.Root).Methods("GET")
まとめ
以前のエントリーでは、routingまで main.go に記載していました。
しかし、main.goは薄く保ちつつ、routingの責務は router.go に負わせた方が適切だと考え、いっそのこと、汎用的に使える雛形が欲しいと思ったので、2パターンで書いてみました。