Go言語のWebフレームワーク、Echoを使ってみようと思ったのですが、導入に少しはまってしまったので対応メモです。なお環境は
- Ubuntu 18.04 LTS (WLS)
- Golang 1.13.4
となっています。
問題
Echoをインストールします。このGithubのREADMEのInstallationに従ってインストールしようとしてみます。
go getしようとするとこんなエラーが表示されてしまいました。
$ go get github.com/labstack/echo/v4package 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"))}
// Handlerfunc 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使ってみたけど楽ですねこれ。
参考: