go1.6とglideでechoフレームワークにHelloWorldする

2016.06.09

丹内です。昨日に引き続き、軽量フレームワークであるechoを使ったgoプロジェクトを作成しました。 Mac OS Xとgo1.6.2 darwin/amd64を前提とします。

環境構築

プロジェクト用のディレクトリを作り、そこでdirenvを設定します。
.envrcには以下のように書きます。

export GOPATH=`pwd`

go製パッケージ管理ツールglideをhomebrewでインストールします。

$ brew install glide

プロジェクト用のディレクトリにREADME.mdとsrc/gosampleディレクトリを作成します。gosampleディレクトリ以下にプロジェクト関連のコードが入ります。

コード

src/gosample/main.goにechoを使ったコードを作成します。

package main

import (
    "net/http"

    "github.com/labstack/echo"
    "github.com/labstack/echo/engine/standard"
)

func main() {
    e := echo.New()
    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello, World!")
    })
    e.Run(standard.New(":1323"))
}

glideのセットアップをします。

$ glide create
[INFO] Generating a YAML configuration file and guessing the dependencies
[INFO] Attempting to import from other package managers (use --skip-import to skip)
[INFO] Found reference to github.com/labstack/echo
[INFO] Adding sub-package engine/standard to github.com/labstack/echo

$ glide install
[WARN] The name listed in the config file (github.com/yuukigoodman/gosample) does not match the current location (.)
[INFO] Lock file (glide.lock) does not exist. Performing update.
[WARN] The name listed in the config file (github.com/yuukigoodman/gosample) does not match the current location (.)
[INFO] Downloading dependencies. Please wait...
[INFO] Fetching updates for github.com/labstack/echo.
[INFO] Detected semantic version. Setting version for github.com/labstack/echo to v2.0.0.
[INFO] Resolving imports
[INFO] Downloading dependencies. Please wait...
[INFO] Setting references for remaining imports
[INFO] Project relies on 1 dependencies.

glide createコマンドによってglide.yamlglide.lockが作成されます。内容は以下のとおりです。

$ cat glide.yaml
package: gosample
import:
- package: github.com/labstack/echo
  subpackages:
  - engine/standard

$ cat glide.lock
hash: 238739c109ca9fae333ab4d8e871691b61c5bafe97dd329c58b362c7d27ae8a9
updated: 2016-06-09T17:40:46.507475875+09:00
imports:
- name: github.com/labstack/echo
  version: f4088cf59417809ed6292c4dcdcd14cd1a34f738
  subpackages:
  - engine/standard
  - engine
  - log
- name: github.com/labstack/gommon
  version: 722aa12d41c236ce78ff48eac1cafe0107ecdc9d
  subpackages:
  - log
  - color
- name: github.com/mattn/go-colorable
  version: 9056b7a9f2d1f2d96498d6d146acd1f9d5ed3d59
- name: github.com/mattn/go-isatty
  version: 56b76bdf51f7708750eac80fa38b952bb9f32639
- name: github.com/valyala/fasttemplate
  version: 3b874956e03f1636d171bda64b130f9135f42cff
- name: golang.org/x/net
  version: 3f122ce3dbbe488b7e6a8bdb26f41edec852a40b
  subpackages:
  - context
- name: golang.org/x/sys
  version: 076b546753157f758b316e59bcb51e6807c04057
  subpackages:
  - unix
devImports: []

grade create時、自動でmain.goが依存しているechoがglide.yamlに記載されていることがわかります。
src/gosample/vendor以下に依存ライブラリが入るので、gitignoreへの追加も忘れないようにしましょう。

$ cat .gitignore
.envrc
src/gosample/vendor

最終的なディレクトリ構成は、以下のようになります。

$ tree
.
├── .envrc
├── .git/
├── .gitignore
├── README.md
└── src
    └── gosample
        ├── glide.lock
        ├── glide.yaml
        ├── main.go
        └── vendor
            ├── github.com
            │   ├── labstack
            │   │   ├── echo
            │   │   │   ├── LICENSE
            │   │   │   ├── README.md
            (以下省略)

Hello, World

$ go run main.go

上記コマンドでサーバを立ち上げた後、ブラウザでlocalhost:1323にアクセスします。

スクリーンショット_2016-06-09_17_58_15`

ハマりどころ

vendor以下に入ったライブラリをimportできる機能はgolang 1.6から正式に提供され始めたものです。
そしてこの機能はGOPATH/src/myProjectのディレクトリにあるgoファイルでしか動かないようです。
変なところにmain.goを配置しないように気をつけましょう。 また、glideコマンド実行時もsrc/myProjectディレクトリにいるようにしましょう。

関連URL