Go言語のWebフレームワーク、Echoを使ってみようと思ったのですが、導入に少しはまってしまったので対応メモです。なお環境は
- Ubuntu 18.04 LTS (WLS)
- Golang 1.13.4
となっています。
問題
Echoをインストールします。このGithubのREADMEのInstallationに従ってインストールしようとしてみます。
go get
しようとするとこんなエラーが表示されてしまいました。
$ go get github.com/labstack/echo/v4
package github.com/labstack/echo/v4: cannot find package "github.com/labstack/echo/v4" in any of:
/usr/local/go/src/github.com/labstack/echo/v4 (from $GOROOT)
/home/username/go/src/github.com/labstack/echo/v4 (from $GOPATH)
READMEじゃなくてこちらのQuick Startに従って、
以下のように実行すると問題なく動きましたが、この書き方だと最新のv4じゃなくてv3がインストールされるみたいです。
$ go get -u github.com/labstack/echo/...
解決策
$GOPATH
じゃなくてGo Modules
の仕組みを使用するとうまくv4をインストールできるようです。Go ModulesはGo言語 1.11から導入されたみたいなので、このバージョン以上のGo言語が必要になるっぽいです。
なので、まずは$GOPATH
じゃなくてGo Modulesを使用するように設定します。
$ export GO111MODULE=on
そしてgo mod init
のコマンドを叩きます。example.com
とgolang_echo_sample
の部分は好きなように変えてください。golang_echo_sample
の部分がビルドしたときの実行ファイルのデフォルトの名前になります。
$ go mod init example.com/golang_echo_sample
あとはEcho
をimportしたソースコードを置いて、go build
を叩けば自動的にEchoのversion 4をダウンロードして使用してくれます。今回はREADMEにあるHelloWorldのサンプルコードを使用します。
package main
import (
"net/http"
"github.com/labstack/echo/v4" // <- Echo v4をimportしている
"github.com/labstack/echo/v4/middleware"
)
func main() {
// Echo instance
e := echo.New()
// Middleware
e.Use(middleware.Logger())
e.Use(middleware.Recover())
// Routes
e.GET("/", hello)
// Start server
e.Logger.Fatal(e.Start(":1323"))
}
// Handler
func hello(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
}
これでbuildすると、自動的に必要な依存関係をダウンロードしてくれます。
$ go build
実行してみます。
$ ./golang_echo_sample
もう一つターミナルを起動させて、curlで動作確認してみます。
$ curl "http://localhost:1323"
Hello, World!
無事動きました。初めてGo Modules使ってみたけど楽ですねこれ。
参考:
コメント