【Golang】Echo v4をインストールする

Go言語のWebフレームワーク、Echoを使ってみようと思ったのですが、導入に少しはまってしまったので対応メモです。なお環境は

  • Ubuntu 18.04 LTS (WLS)
  • Golang 1.13.4

となっています。

問題

Echoをインストールします。このGithubのREADMEのInstallationに従ってインストールしようとしてみます。

GitHub - labstack/echo: High performance, minimalist Go web framework
High performance, minimalist Go web framework. Contribute to labstack/echo development by creating an account on GitHub.

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に従って、

https://echo.labstack.com/guide

以下のように実行すると問題なく動きましたが、この書き方だと最新の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.comgolang_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使ってみたけど楽ですねこれ。

参考:

Unable to install echo · Issue #1374 · labstack/echo
Issue Description My go version go version go1.12.7 darwin/amd641 I installed echo using go get gopkg.in/labstack/echo.v...

コメント