この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
丹内です。昨日に引き続き、軽量フレームワークである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.yaml
とglide.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
にアクセスします。
`
ハマりどころ
vendor
以下に入ったライブラリをimportできる機能はgolang 1.6から正式に提供され始めたものです。
そしてこの機能はGOPATH/src/myProject
のディレクトリにあるgoファイルでしか動かないようです。
変なところにmain.goを配置しないように気をつけましょう。
また、glideコマンド実行時もsrc/myProject
ディレクトリにいるようにしましょう。