MacでGo開発環境構築

  • 18
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

概要

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 

参考