Go のバージョン
- go 1.14.4
$ go version go version go1.14.4 darwin/amd64
GOMODULEを使う
GOMODULE についてはこの記事がわかりやすいです。
Qiitaに書いている通り GOMODULE を有効にします。
# 現在の状態を確認 $ go env GO111MODULE="" # 値を変更 $ go env -w GO111MODULE=on # 書き換わったことを確認 $ go env GO111MODULE="on"
go.mod
ファイルを作成します。
go mod init <アプリケーション名とか>
こんな感じのファイルができるはず
module <アプリケーション名とか> go 1.14
GOMODULEでginを入れる
ginはORMやActive Recordは入っていないので、フルスタックなフレームワークではないです。
しかし色々な拡張ライブラリがあります。ライブコンパイルの拡張があって非常に便利なので、僕は結構好んで使っています。
ginの導入についてはこちらの Qiita を参考にしました。
ginのインストール
go get -u github.com/gin-gonic/gin
main.go
というファイルを作成して以下のようにしました。
package main import "github.com/gin-gonic/gin" func main() { router := gin.Default() router.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) router.Run() }
動かしてみます
go run main.go
これで http://localhost:8080/ping とかにアクセスすると json で pong が返ってきます。
Herokuにデプロイする
Herokuで動かす場合は、環境変数の PORT を読み込んで、そのポートでアプリケーションを動かす必要があるので、少しコードを変更します。
package main
import ( "os"
"github.com/gin-gonic/gin"
)
func main() { router := gin.Default() router.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) })
port := os.Getenv("PORT")
router.Run(":" + port)
}
そして、以下のような内容の `Procfile` というファイルをリポジトリルートに配置するだけです。
web: bin/<アプリケーション名とか>
あとは GitHub 経由なりで Heroku にデプロイするだけです。 Heroku に Go をデプロイした場合、 `bin/` 以下にコンパイルされてバイナリが配置されるようです。