[Go]
GO言語を始めてみよう
GOの環境構築
Windowsでの例、.bashrc on Msys2
- 昔はWindowsを使っていたのです
export GO_HOME=$HOME/.go export GOPATH=$HOME/.go export PATH=$PATH:/c/Go/bin:$GO_HOME/bin:$GOPATH/bin
Debianでの例、 The Go Programming Language - Getting Started を見て
// 公式サイトから落とす $ wget https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gz $ tar -C /usr/local -xzf go1.7.4.linux-amd64.tar.gz $ cat ~/.bashrc GOPATH=$HOME/.go GO_HOME=/usr/local/go PATH=$PATH:$GO_HOME/bin:$GOPATH/bin 上の場合 sudo chown user:user -R /usr/local/go やっとくといい $ source ~/.bashrc $ go version go version go1.7.4 linux/amd64 // 終わり // 以下を追記、$GO_HOMEを/usr/local/goにしてしまうとRubyもそうだけど書き込み権限が無くて死ぬんじゃないかなと $ cat ~/.bashrc GOPATH=$HOME/.go GO_HOME=$HOME/.go PATH=$PATH:$GO_HOME/bin:$GOPATH/bin $ source ~/.bashrc $ sudo godeb install
- 他人のライブラリビルドするとき、GOBINという変数も必要になる
追記しとく
$ cat ~/.bashrc GOPATH=$HOME/.go GO_HOME=/usr/local/go PATH=$PATH:$GO_HOME/bin:$GOPATH/bin GOBIN=$GOPATH/bin
言語バージョン管理ツール
asdf
- 別ページ参照
goenv
- Go言語のバージョン切り替えには~env系のツールの1つ、goenvが使いやすかった
慣れてきたら使ってほしい
goenvの操作
- goenvの更新
$ cd ~/.goenv $ git pull --rebase
- goenvでインストール可能なgoのバージョンを一覧化
$ goenv install -l Available versions: 1.2.2 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 ...
- インストール
$ goenv install 1.18.0 Downloading go1.18.linux-amd64.tar.gz... -> https://golang.org/dl/go1.18.linux-amd64.tar.gz ######################################################################################################################################################################################################### 100.0%######################################################################################################################################################################################################### 100.0% Installing Go Linux 64bit 1.18.0... Installed Go Linux 64bit 1.18.0 to /home/hiroyuki/.goenv/versions/1.18.0 $ goenv global 1.18.0 $ go version go version go1.18 linux/amd64
Emacs
- GO関連の環境変数は exec-path-from-shell を使う
;; PATH (unless (package-installed-p 'exec-path-from-shell) (package-refresh-contents) (package-install 'exec-path-from-shell)) ;; bashと変数を共有 (exec-path-from-shell-initialize) ;; Go (unless (package-installed-p 'go-mode) (package-refresh-contents) (package-install 'go-mode)) (add-to-list 'auto-mode-alist '("\\.go$" . go-mode))
必要なgo パッケージの導入
- Go用のEmacsパッケージは分けるとよい
- .emacs.d/go.elを用意する
;; go-mode (load "~/.emacs.d/go")
- go.el
(unless (package-installed-p 'flycheck) (package-refresh-contents) (package-install 'flycheck)) (unless (package-installed-p 'company-go) (package-refresh-contents) (package-install 'company-go)) ;; Goのパスを通す (add-to-list 'exec-path (expand-file-name (concat (getenv "GO_HOME") "/bin") )) ;; go get で入れたツールのパスを通す (add-to-list 'exec-path (expand-file-name (concat (getenv "GOPATH") "/bin")))
- gofmt(コードを整形してくれるパッケージ。デフォルトで導入済み)
- godef(関数定義などを参照できるパッケージ)
- gocode(autocompleteやcompanyと連携して補完をしてくれるパッケージ)
- golint / errcheck (flycheck で自動的にシンタックスエラーを検知)