先日、社外のエンジニアと話す機会がありました。
その中でGo言語の話になり、Go言語に対しての良い印象を受けたのでそろそろバックエンド開発をGo言語にシフトしようかな、と思いました。
私はGoほぼ未経験ですので今回はDocker上にGo言語環境を容易し、Webサーバで「HelloWorld」を返す程度のものを作成してみようと思います。
ディレクトリ構成
ディレクトリの中身は以下の2ファイルのみです。
それぞれ見ていきましょう。
.
├── docker-compose.yml
└── main.go
docker-compose.yml
version: '3'
services:
app:
image: golang:latest
container_name: go_container
tty: true
ports:
- "8080:8080"
volumes:
- .:/go
Dockerイメージとしてgolangの最新版を使用します。
これだけでGo言語環境が使用できます。
ポートフォワードの設定は8080、コンテナ名は任意ですが今回はgo_containerとしました。
また、ディレクトリ直下のファイルをすべてコンテナ内の/go以下に配置しています。
実装はローカルのVim上で行い、実行をDockerコンテナ内で行う形で進めます。
main.go
main.goを実装していきます。
その前に今回使用するGoパッケージをインストールします。
まず以下のコマンドでDockerコンテナを起動してアタッチします。
# Dockerコンテナ起動 -dオプションでバックグラウンドで起動させています。
$ docker-compose up -d
# 起動中のコンテナ(app)にアタッチします。
$ docker-compose exec app bash
無事コンテナに入ることができたらGoのWebアプリケーションフレームワークのGinをインストールします。
$ go get github.com/gin-gonic/gin
インストールが完了したらmain.goを実装していきます。
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/hello", func(c *gin.Context) {
c.String(http.StatusOK, "Hello World!!")
})
router.Run(":8080")
}
git.Defaultでrouterを作成し、 routerにGETの/hello
APIを追加します。
レスポンスは「Hello World!!」とします。
最後にポート8080を指定して起動します。
$ go run main.go
起動が確認できたらブラウザでlocalhost:8080/hello
にアクセスしてみます。
レスポンスが確認できました。
まとめ
Dockerを利用することで環境構築に時間をかけずにGo言語へ入門することができました。
まずはGinを利用してCRUDのAPI開発を行なってみて少しずつGo言語での開発に慣れていきたいと思います。