開発環境・バージョン
- Mac OSX
- VSCode 1.14.2
- 拡張機能: go 0.6.63
- golang 1.8.3
- gvmでインストールする
- gvm 1.0.22
- golangのバージョン管理ツール
- Pythonでいうpyenv, Node.jsでいうnvm
- delve 1.0.0-rc.1
- デバッグツール
- VSCodeからgolangを実行するために使う
- dep 0.2.0
- パッケージ管理・依存関係管理ツール
- JavaScriptでいうnpm
golangの最新バージョンをインストールする
バージョン管理ツール「gvm」のインストール
goの最新バージョン(執筆時点では1.8.3、betaやrcは除外)をインストールする。
まずはどんな言語を使うときも定番なバージョン管理ツールをインストールする。golangの場合はgvmというツールを使う。
gvmを使わず直接インストールする場合は、homebrewでインストールしてパスを通せば完了。
# gvmのインストール
$ bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
Cloning from https://github.com/moovweb/gvm.git to $HOME/.gvm
No existing Go versions detected
Installed GVM v1.0.22
Please restart your terminal session or to get started right away run
`source $HOME/.gvm/scripts/gvm`
# 設定ファイルの再読込
$ source $HOME/.gvm/scripts/gvm
# gvmのバージョン確認
$ gvm version
Go Version Manager v1.0.22 installed at $HOME/.gvm
$HOMEと書いている部分は通常は「/User/username」になる。
goのインストール
gvmを使ってgoをインストールする。
ここで注意すべき点は、go1.5以上をインストールするためにはgo1.4が必要だということ。
go1.4がないと「ERROR: Cannot find $HOME/go1.4/bin/go」というエラーが発生する。
追記: 2017/08/09 12:40
詳細は後述するが、「gmv install go.1.8.3 -B」とBオプションを付けることでgo1.4のインストールが不要になる
# 利用できるバージョンの確認
$ gvm listall
# go1.5以上をインストールするために、一旦go1.4をインストールする
$ gvm install go1.4
Installing go1.4...
* Compiling...
go1.4 successfully installed!
# go1.4をデフォルトに設定
$ gvm use go1.4
Now using version go1.4
# 最新バージョンをインストールする(2017/08/01時点では1.8.3)
$ gvm install go1.8.3
Installing go1.8.3...
* Compiling...
go1.8.3 successfully installed!
# インストールされたバージョンを確認
$ gvm list
gvm gos (installed)
=> go1.4
go1.8.3
# go1.8.3を使うようにする
$ gvm use go1.8.3
Now using version go1.8.3
# バージョン確認
$ go version
go version go1.8.3 darwin/amd64
とりあえずコマンドでgoを実行できるようになった。
// main.go
package main
import (
"fmt"
)
func main () {
fmt.Println("Hello world!")
}
# 実行する
$ go run main.go
Hello world!
追記: 2017/08/09 12:40
gvm installするときに「-Bオプション」をつけることでバイナリからインストールすることができる。
go1.4がないとgo1.5以上がインストールできないと述べたが、バイナリからインストールすればgo1.4のインストールが不要になる。(そもそもgo1.4は1.5以降をコンパイルするためだけに使っていたので)
$ gvm listall
# バイナリからgo1.8.3をインストール(go1.4は不要)
$ gvm install go1.8.3 -B
$ gvm use go1.8.3
$ go version
go version go1.8.3 darwin/amd64
あー「gvm install」は最後に-Bつければもっとインストール簡単ですよ! https://t.co/mKtDfoTZ2D— nobonobo🐦 (@nobonobo) 2017年8月9日
バイナリインストールではGo1.4が不要になります!— nobonobo🐦 (@nobonobo) 2017年8月9日
VSCode上からgolangを実行できるようにする
goをインストールしただけではVSCodeから実行したりデバッグしたりできない。
また、開発するにしてもデフォルトでサポートしていないので不便だ。
goの拡張機能をインストールする
コマンドパレットで「install extentions」と入力、またはサイドバーのExtensionsメニューをクリックし、「go」で検索する。そして「Go: Rich Go language support for Visual Studio Code」という拡張機能をインストールする。
デバッグツール「delve」をインストールする
拡張機能をインストールしただけでは動かせない。
そこでgoのデバッグツールである「delve」をインストールする。
私の環境だと、$GOPATHにアクセスできずdelveもインストールできなかったので、まずは.bash_profileを編集しパスを通す。
# パスを通す
$ cat << EOL >> ~/.bash_profile
## go
if [ -x "`which go`" ]; then
export GOPATH=\$HOME/go
export PATH=\$GOPATH/bin:\$PATH
fi
EOL
# .bash_profileの反映
$ source ~/.bash_profile
viエディタなどで直接.bash_profileを編集する場合は、$の前にある\(バックスラッシュ)を削除してください。コマンドで実行するためにエスケープしているだけなので。
ちなみに$GOPATH配下で開発したり、go getでインストールしたパッケージが格納されたりする。
パスを通したところで、delveをインストールする。
# delveのインストール
$ go get -u -v github.com/derekparker/delve/cmd/dlv
# バージョンの確認
$ dlv version
Delve Debugger
Version: 1.0.0-rc.1
Build: $Id: b6077a6a35c48a31716aad2ad3fdf77bbdf70abd $
$GOPATH/src/github.com/derekparker/delveと$GOPATH/bin/dlvにファイルが作られていることを確認する。
拡張機能の関連ツールをインストールする
ここまでできればVSCode上からgoを実行できるのだが、たまに「[Info]The "go-outline" command is not available. Use "go get -v github.com/ramya-rao-a/go-outline" to install.」というメッセージが表示される。
他にもgolintやgo-symbolsなど、有効になってないよーというメッセージがVSCode上部に表示される。
そのときは「Install All」をクリックし、関連ツールを一挙にインストールする。ちなみにOUTPUTには以下のような内容が表示される。
Installing 12 tools gocode gopkgs go-outline go-symbols guru gorename gomodifytags impl godef goreturns golint gotests Installing github.com/nsf/gocode SUCCEEDED Installing github.com/tpng/gopkgs SUCCEEDED Installing github.com/ramya-rao-a/go-outline SUCCEEDED Installing github.com/acroca/go-symbols SUCCEEDED Installing golang.org/x/tools/cmd/guru SUCCEEDED Installing golang.org/x/tools/cmd/gorename SUCCEEDED Installing github.com/fatih/gomodifytags SUCCEEDED Installing github.com/josharian/impl SUCCEEDED Installing github.com/rogpeppe/godef SUCCEEDED Installing sourcegraph.com/sqs/goreturns SUCCEEDED Installing github.com/golang/lint/golint SUCCEEDED Installing github.com/cweill/gotests/... SUCCEEDED All tools successfully installed. You're ready to Go :).
開発用ディレクトリを作成する
golangでは、一般的に$GOPATH/src/github.com/{user}/{repository}のように、$GOPATH配下で開発を行う。
私の環境だとフルパスでは /User/rikko/go/src/github.com/BcRikko/learning-go のようなディレクトリを掘っている。
$GOPATH └── src └── github.com └── BcRikko └── learning-go └── hello.go
このときに$GOPATHが定義されていなかったり、違うディレクトリで開発しているとVSCodeから実行できなくなるので注意が必要だ。
Hello World!!
Hello worldするためにテキトーにコードを書く。// hello.go
package main
import (
"fmt"
)
func main () {
fmt.Println("Hello world!!")
}
コードが書けたらhello.goを開いた状態で[F5]、またはコマンドパレットから[Debug: Start Debugging]を実行する。
初回だけ次のようなダイアログが表示され、パスワードを求められる。
パスワードを入力して[続ける]をクリックすると、プログラムがコンパイルされ実行される。
VSCodeのDEBUG CONSOLEには以下のように出力される。
2017/08/01 15:22:04 server.go:73: Using API v1 2017/08/01 15:22:04 debugger.go:97: launching process with args: [$GOPATH/src/github.com/BcRikko/learning-go/debug] API server listening at: 127.0.0.1:2345 2017/08/01 15:22:04 debugger.go:505: continuing Hello world!!
以上で、開発環境構築〜Hello worldまで完了!
おまけ: パッケージの依存関係管理ツール「dep」をインストールする
前述のとおり、go getしたパッケージはすべて$GOPATH/src/github.comなどに入ってしまう。すべてが共用になってしまうので、depという公式ツールでのパッケージ依存関係を管理する。
glideという3rdパーティ製もあるのだが、公式が出しているのならそれに越したことはない。ということでglideについては触れない。
まずdelve同様go getでインストールする。
# depのインストール
$ go get -u github.com/golang/dep/cmd/dep
続いて、プロジェクトディレクトリに移動して初期化を行う。npmでいうnpm init。
$ cd /path/to/project
# 初期化
$ dep init
# 以下のファイル・ディレクトリがつくられる
.
├── Gopkg.lock
├── Gopkg.toml
└── vendor
試しにgolangのBDDフレームワーク「ginkgo」をインストールしてみる。
まず、importを書く。
package main
import {
. "github.com/onsi/gomega"
}
// 以下略
# 依存関係にあるパッケージのインストール
$ dep ensure
# ディレクトリ
.
├── Gopkg.lock
├── Gopkg.toml
└── vendor
├── github.com
├── golang.org
└── gopkg.in
このようにプロジェクトディレクトリ内のvendorディレクトリに、パッケージがインストールされる。このときGopkg.lockの内容が書き換わっていることを確認してほしい。
参考サイト
- A Tour of Go
- Home · golang/go Wiki
- GOPATH · golang/go Wiki
- Microsoft/vscode-go: An extension for VS Code which provides support for the Go language.
- derekparker/delve: Delve is a debugger for the Go programming language.
- moovweb/gvm: Go Version Manager
- Big Sky :: golang オフィシャル謹製のパッケージ依存解決ツール「dep」
盛大に躓いて開発環境構築に半日ほど費やしてしまった。
$GOPATHの意味をちゃんと調べていなかったのが原因だろう。
今後は、golangについてまなんだこともブログに書こうと思う。
以上
written by @bc_rikko
0 件のコメント :
コメントを投稿