Mac(homebrew)でGoのインストールと、Emacsの環境構築
Goの勉強のためまずHello worldとEmacsの環境を構築をしたので、その記録。
この記事のゴール
- homebrewでGoのインストール
- godocによるドキュメントの表示
- Hello worldを表示する
- Emacsの環境構築
- go-autocompleteで保管
- M-x godocでドキュメント表示
- goflaymakeで構文チェックなど
- godefで定義ジャンプ
goをhomebrewでインストールする
$ brew install go
インストールされているか確認
$ go version go version go1.2 darwin/amd64
Hello worldを書いてみる
適当な場所で以下のファイル(hello.go)を作成
package main import "fmt" func main() { fmt.Println("Hello World!") }
ビルドして実行
$ go build hello.go $ ./hello Hello World!
godocをインストールしてドキュメントを表示する
godocを使うとコマンドのドキュメントを表示できるようになる。以下のように使う。
$ godoc fmt Println PACKAGE DOCUMENTATION package fmt import "fmt" FUNCTIONS func Println(a ...interface{}) (n int, err error) Println formats using the default formats for its operands and writes to standard output. Spaces are always added between operands and a newline is appended. It returns the number of bytes written and any write error encountered.
godocをインストールするにはgo getを使うようなんだけど、環境変数$GOPATHを設定していないとだめらしい。.zshrcなどに以下のように設定する。
# for go lang if [ -x "`which go`" ]; then export GOROOT=`go env GOROOT` export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin fi
GOROOT/binをPATH環境変数に追加しているのは、godocのコマンドのインストール先がここになるから。(通常は、GOPATH/binにインストールされるらしい)
Go 1.2 (devel) doesn't install godoc into bin · Issue #23281 · Homebrew/legacy-homebrew · GitHub
以下のコマンドでgodocをインストール。
$ go get code.google.com/p/go.tools/cmd/godoc
ちなみに、$GOPATHを設定してないと以下の様なエラーとなる。
$ go get code.google.com/p/go.tools/cmd/godoc package code.google.com/p/go.tools/cmd/godoc: cannot download, $GOPATH not set. For more details see: go help gopath
Emacsの環境設定
次の記事を参考に必要なものをインストールした。
go側の必要なパッケージをインストールしておく。
$ go get code.google.com/p/go.tools/cmd/godoc $ go get code.google.com/p/rog-go/exp/cmd/godef $ go get github.com/nsf/gocode $ go get -u github.com/dougm/goflymake
list-packagesで以下をインストールしておく
- go-mode
- go-autocomplete
- auto-complete-mode(インストール済みだったので、ここでは特に説明しない)
- flyamke(インストール済みだったので、ここでは特に説明しない)
init.elに以下を追加。
;; PATHの設定をシェルの設定から持ってくる ;; $SHELLで設定されているシェルの設定が使われる (when (memq window-system '(mac ns)) (exec-path-from-shell-initialize)) ;; ============================================== ;; goの設定 ;; ============================================== (when (and (require 'go-mode nil t) (executable-find "go")) ;; GOROOT, GOPATH環境変数を読み込む (let ((envs '("GOROOT" "GOPATH"))) (exec-path-from-shell-copy-envs envs)) ;; go-autocompleteの読み込み (eval-after-load "go-mode" '(progn (require 'go-autocomplete))) ;; goflaymakeの読み込み (add-to-list 'load-path (concat (getenv "GOPATH") "/src/github.com/dougm/goflymake")) (require 'go-flymake) ;; go-eldocの設定 ;; https://github.com/syohex/emacs-go-eldoc (add-hook 'go-mode-hook 'go-eldoc-setup) (set-face-attribute 'eldoc-highlight-function-argument nil :underline t :foreground "green" :weight 'bold) )
今回、exec-path-from-shellを使って.zshrcで設定したPATHや環境変数(GOROOT, GOPATH)を読み込むようにしている。
- EmacsでPATHの設定が引き継がれない問題をエレガントに解決する - Qiita
- Emacsでの環境変数の設定に exec-path-from-shellを使うようにした - syohex’s diary
ちなみに、exec-path-from-shellは$SHELL環境変数に設定されているシェルの環境変数をひっぱってくるらしい。デフォルトのシェルを変更するには以下のようにする(ここでは、bashからzshに変更)
$ echo $SHELL /bin/bash $ chsh -s /bin/zsh # ここで再起動 # 再起動後以下のように表示されていればOK $ echo $SHELL /bin/zsh
そして、Emacsを起動して、hello.goを開いてみる。fmt.Pまで入力すると以下のように保管される。
godocも使える。
goflymake(https://github.com/dougm/goflymake)でエラーチェックなど
定義へジャンプする。
Printlnへカーソルを持ってきて「C-c C-j」でPrintlnのソースコードへジャンプする。
とりあえず今日は環境設定で終わり。次は、何かプログラムを作ってみようかな。
追記(2014/01/14)
go-eldocを追加(init.elの設定は前述の設定に追加)
@syohex さんに教えてもらったgo-eldoc(GitHub - syohex/emacs-go-eldoc: eldoc for go language)を追加。以下のようにミニバッファにメソッドの引数がでてくる。(・∀・)イイ