16
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

golangのginで遊んでみる

Last updated at Posted at 2017-02-21

きっかけ

  • 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の実装をします!!(なるべく早く)
16
16
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?