weblog of key_amb

主にIT関連の技術メモ

初めての Go #golang

だいぶ今更感がありますが、重い腰を上げてようやく Go 言語を触ってみることにしました。
主に下記記事を足がかりに学習を進めています。

私的メモ: golang 学習 - A Tour of Go をなぞる - Qiita

開発環境は MacOS Mavericks で、エディタは Vim です。

以下、インストールから、初めてのライブラリ作成までのログです。

(1) Go Install / Configure

公式ページからMac用のパッケージをダウンロードしてインストール。
Downloads - The Go Programming Language

インストール後、ターミナルを起動し直すと、/usr/local/go/bin に PATH が通っていた。

% which go
/usr/local/go/bin/go

% go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH=""
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"

How to Write Go Code - The Go Programming Language に従って、GOPATH を設定する。
こんな感じで↓

# Go
export GOPATH=$HOME/my/go
export PATH=$PATH:$GOPATH/bin

これによって、Go のパッケージを go get$GOPATH 下に取ってこれたり、コンパイル後のバイナリが $GOPATH/bin 下に配置されるようになる。

(2) Vim 用の環境設定

チュートリアルをやってて、途中でつらくなったので環境整備した。
Vim が最新版だとシンタックスハイライトぐらいは効くっぽいが、手元の Mac ではインデントすら効かなかった。

vimのGoサポートが手厚くて打ち震えている - Qiita 辺りを参考にした。

とりあえず vim-jp/vim-go-extragoogle/vim-ft-go を入れておけばよさそう。
ついでに今まで使ってなかったファイラのプラグインとして、NERDTree を導入してみる。
vim-plugin NERDTree で開発効率をアップする! - Qiita

:NERDTreeToggle なんて毎回打ってられないだろうから、キーマッピングもしておく。

.vimrc に下のように書き足した。

NeoBundle 'scrooloose/nerdtree'
" for golang
NeoBundle 'vim-jp/vim-go-extra'
NeoBundle 'google/vim-ft-go'

" key map
nnoremap ,t <ESC>:NERDTreeToggle<Return>

一度 Vim を再起動して、:NeoBundleInstallプラグインをインストール。

その後、.go ファイルを開くとカラフルになっていい感じだった。
,t の NERDTree もいい感じ。

1つ目の記事にあった godoc, golint などのツールも入れておくとよさそうだけど、いったんスキップ。

ちなみに、Vim 以外にどんなエディタやIDEがよさそうか少しだけ調べたので、この記事の最後に紹介する。

(3) Hello, world からの初めてのライブラリ

How to Write Go Code - The Go Programming Language の続き。
Go 開発をするにあたってディレクトリレイアウトをどうしたらいいかというのが書いてある。

この辺りはちゃんと理解しておこう、ということで "Hello, world" な main 関数を持つ hello.go と、掛け算ライブラリの multiply.go を書いてみる。
チュートリアルではライブラリは文字列の reverse だったけど、おもしろくないので気分で変えた。

最終的なディレクトリレイアウトはこうなった。

% tree
.
├── bin
│   └── hello
├── pkg
│   └── darwin_amd64
│       └── github.com
│           └── key-amb
│               └── multiply.a
└── src
    └── github.com
        └── key-amb
            ├── hello
            │   └── hello.go
            └── multiply
                └── multiply.go

10 directories, 4 files

hello.go, multiply.go の中身はこんな感じ:

// hello.go
package main

import (
    "fmt"
    "github.com/key-amb/multiply"
)

func main() {
    fmt.Printf("Hello, world\n")
    fmt.Printf("3 * 2 = %d\n", multiply.Double(3))
}
// multiply.go
package multiply

func Double(i int) int {
    return i * 2
}

書いたら次のコマンドでコンパイルできる。

go build github.com/key-amb/multiply
go install github.com/key-amb/hello

ちなみにコードを書いてる途中は go run hello.go とかで直接実行できて便利。

まだ大して進んでいないが、もうそれなりのボリュームになってきたので、この記事はいったんここで〆ておく。
これから A Tour of Goチュートリアルを写経しまくるつもり。

補遺: Vim 以外のエディタや IDE について

執筆時点では Mac でしか試してませんが、参考記事には Mac に依らない情報もあります。

結論としては、Atom か LiteIDE か Eclipse がよさげ。
他に好みによっては Emacs とか IntelliJ IDEA とか Sublime Text という選択肢もあるかも。
GoIDE っていうそのものズバリのもあるが、2011/08 に 1.0 がリリースされて以降、更新されてないので、候補から外していいだろう。

以下を参考にした。