Help us understand the problem. What is going on with this article?

gbでginをrunする

More than 3 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 等と打って動作確認してみましょう。

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした