Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
14
Help us understand the problem. What is going on with this article?
@wataru420

gbでginをrunする

More than 5 years have passed since last update.

前回はgomを使ってパッケージ管理してみたのを、新たにGBというのがあると聞いて、そっちも試してみました。

GBの特徴はプロジェクトに必要なコードを全てvendoringする事。
いわゆるプロジェクトベースと呼ばれるツールな事。くわしくはここを見るといいかも?

さっそくGBをインストールしましょう。

$ go get github.com/constabulary/gb/...

GBはプロジェクトのディレクトリ構造が独特です。
ソースは必ずsrcディレクトリに、さらにsrc直下は実行できず、かならずパッケージディレクトリを作る必要があります。

~/code/demo-project $ tree -d .       
.                                                                   
├── src                               
│   └── hello

こんな感じでディレクトリを作ります。

次にginをインストールしましょう。
GBではgo getのかわりにgb vendor fetchを使います。

$ gb vendor fetch github.com/gin-gonic/gin

するとvendorというディレクトリができ、中にgin関連のsrcが配置されます。
このvendorはブランチを指定したり、updateするなど、様々な機能があります。
詳しくはここを見るといいです。

その際にvendorディレクトリにはmanifestファイルが生成されます。
json形式でbranchやrevisionが記述されているファイルで、他の人はこのファイルを元にgb vendor restoreを行うと同じ環境をつくれるという仕組みです。

では実際にmain.goを作ってhelloディレクトリに格納しましょう。

main.go
func main() {
    router := gin.Default()

    // This handler will match /user/john but will not match neither /user/ or /user
    router.GET("/user/:name", func(c *gin.Context) {
        name := c.Param("name")
        c.String(http.StatusOK, "Hello %s", name)
    })

    // However, this one will match /user/john/ and also /user/john/send
    // If no other routers match /user/john, it will redirect to /user/join/
    router.GET("/user/:name/*action", func(c *gin.Context) {
        name := c.Param("name")
        action := c.Param("action")
        message := name + " is " + action
        c.String(http.StatusOK, message)
    })

    router.Run(":8080")
}

GBは単体の.goのファイルの実行やビルドはサポートしていません。
なので実行するには一度ビルドをする必要があります。

$ gb build
$ bin/hello
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET   /user/:name               --> main.main.func1 (3 handlers)
[GIN-debug] GET   /user/:name/*action       --> main.main.func2 (3 handlers)
[GIN-debug] Listening and serving HTTP on :8080

こんな感じで実行できます。
ブラウザから http://localhost:8080/user/oresama 等と打って動作確認してみましょう。

14
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
wataru420
PTA会長してます。
cyberagent
サイバーエージェントは「21世紀を代表する会社を創る」をビジョンに掲げ、インターネットテレビ局「AbemaTV」の運営や国内トップシェアを誇るインターネット広告事業を展開しています。インターネット産業の変化に合わせ新規事業を生み出しながら事業拡大を続けています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
14
Help us understand the problem. What is going on with this article?