概要
MacでGo言語開発を行うための環境構築について、以下を使用することを前提にまとめます。
- パッケージマネージャー: Homebrew
- 開発エディター: Vim (+vim-plug)
Goインストール(Homebrew)
$ brew install go
==> Downloading https://homebrew.bintray.com/bottles/go-1.6.3.el_capitan.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring go-1.6.3.el_capitan.bottle.1.tar.gz
==> Caveats
As of go 1.2, a valid GOPATH is required to use the `go get` command:
https://golang.org/doc/code.html#GOPATH
You may wish to add the GOROOT-based install location to your PATH:
export PATH=$PATH:/usr/local/opt/go/libexec/bin
==> Summary
🍺 /usr/local/Cellar/go/1.6.3: 5,778 files, 328.4M
% which go
/usr/local/bin/go
GOPATH環境変数
go get
コマンドでパッケージをダウンロードするパスを指定します。
GOPATHは好きな場所を設定可能です。
$ export GOPATH=$HOME/.go
$ export PATH=$PATH:$GOPATH/bin
- bashrc設定
## Go 環境設定
if [ -x "`which go`" ]; then
export GOPATH=$HOME/.go
export PATH=$PATH:$GOPATH/bin
fi
このパス指定だが、プロジェクトごとにパッケージをダウンロードする領域を分ける事ができず、全てのプロジェクトのパッケージがこのパスにダウンロードされてしまうという課題があるよう!
Hello World!
ソースコード
hello.go
package main
import "fmt"
func main() {
sayHello()
}
func sayHello() {
fmt.Println("Hello World!")
}
実行
- 実行
$ go run hello.go
Hello World!
- コンパイル(依存関係含む)して実行ファイルを作成 & 実行
$ go build hello.go
$ ./hello
Hello World!
Vimで入力補完
vim-go
Go開発用vimプラグイン fatih/vim-go をインストールします。
Plug 'fatih/vim-go'
gocode
Goで入力補完を行うためにgocode をインストールします。
Plug 'nsf/gocode', { 'rtp': 'vim', 'do': '~/.vim/plugged/gocode/vim/symlink.sh' }
これでを入力することで補完が行えるようになりました。
もっと便利にするための.vimrc設定
" --------------------------------
" vim-plug
" --------------------------------
call plug#begin('~/.vim/plugged')
Plug 'junegunn/vim-plug',
\ {'dir': '~/.vim/plugged/vim-plug/autoload'}
Plug 'fatih/vim-go'
Plug 'nsf/gocode', { 'rtp': 'vim', 'do': '~/.vim/plugged/gocode/vim/symlink.sh' }
call plug#end()
:
:
" vim-go設定
au FileType go nmap <leader>r <Plug>(go-run)
au FileType go nmap <leader>b <Plug>(go-build)
au FileType go nmap <leader>t <Plug>(go-test)
au FileType go nmap <leader>c <Plug>(go-coverage)
au FileType go nmap <Leader>i <Plug>(go-info)
au FileType go nmap <Leader>gd <Plug>(go-doc)
au FileType go nmap <Leader>gv <Plug>(go-doc-vertical)
au FileType go nmap <Leader>gb <Plug>(go-doc-browser)
au FileType go :highlight goErr cterm=bold ctermfg=214
au FileType go :match goErr /\<err\>/
let g:go_highlight_functions = 1
let g:go_highlight_methods = 1
let g:go_highlight_structs = 1
let g:go_highlight_operators = 1
let g:go_highlight_build_constraints = 1
let g:go_fmt_fail_silently = 1
let g:go_fmt_autosave = 0