きっかけ
- Goの後藤(私の苗字)になりたい
- なんか音楽のサービスを作りたい
- なんかやるからにはやることにファイル分けてやりたい
- https://github.com/bossbuss0910/music_app ここにつけたしていきます
環境
- 後藤はGoの初心者(すこーーしだけ触らしてもらったことある)
- go1.4
- フレームワーク gin
- データベース mysql (今回は使わない)
- orm gorm (今回使わない)
やること
まずginのREADME.mdにあるapiの実装してみようかと
んでディレクトリ構成はこんなかんじ
├── app
│ ├── route.go
│ └── server.go
├── handlers
│ ├── hello.go
│ └── welcome.go
└─── main.go
こんな感じにする
中身の話
main.go
- 以下のように記述
main.go
package main
import (
"music_app/app"
_"github.com/gin-gonic/gin"
)
func main() {
app.Start()
}
- ここで
import "github.com/gin-gonic/gin"
ってやりたいけど我慢 - いろんなサイトではmainにサーバ起動しているけどなんか見づらいからserver.goに書く
server.go
- なんかendlessって早くリスタートとかしてくれるらしい endless
server.go
package app
import (
"github.com/fvbock/endless"
"github.com/gin-gonic/gin"
)
func Start() error {
app := setup()
return endless.ListenAndServe("localhost:8080", app)
}
func setup() *gin.Engine {
app := gin.New()
RouteV1(app)
return app
}
route.go
route.go
package app
import (
"github.com/gin-gonic/gin"
"music_app/handlers"
)
func RouteV1(app *gin.Engine) {
helloHandler := handlers.NewHelloHandler()
welcomeHandler := handlers.NewWelcomeHandler()
apiGroup := app.Group("api")
{
apiGroup.GET("/user/:name", helloHandler.GetName)
apiGroup.GET("/welcome", welcomeHandler.GetName)
}
}
このapp.Groupっていうのが結構よくて
この場合localhost:8080/api/user/bossbuss0910
とやるとうまくいく
処理は各々handlerのファイルで書く
hello.go
hello.go
package handlers
import (
"github.com/gin-gonic/gin"
"net/http"
)
type helloHandlerInterface interface {
GetName(c *gin.Context)
}
func NewHelloHandler() helloHandlerInterface {
return &helloHandler{}
}
type helloHandler struct {
}
func (h *helloHandler) GetName(c *gin.Context) {
name := c.Param("name")
c.String(http.StatusOK, "Hello %s", name)
}
NewHelloHandler()
で生成する。そこからGetNameが呼ばれる
# まとめ
- 今回は簡単なapiの作成を行った
- 次はgorm使ってCRUDの実装をします!!(なるべく早く)