Goはじめました

以前から興味はあったけど手を出していなかったGo言語ですが、Go 1.1のリリースで、64bit整数も使えるようになったことだし、そろそろやってみる事にします。当面の目標は今までC++で書いていたネットワークサーバ・プログラムをGoで書くことです。

環境構築

普段使っているOSXにGo言語の環境を作ります。

Go言語のインストール

参考

Homebrewであれば以下のコマンドで一発です。

$ brew install go
$ cat hello.go
package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

$ go run hello.go
hello, world
環境変数

Go関連の環境変数を設定します。
brew upgrade したらGOROOTの設定も変わるようにしています。

参考

program_exists () {
	type "$1" &> /dev/null ;
}

if program_exists go; then
	function setupGOROOT()
	{
		local GOPATH=`which go`
		local GODIR=`dirname $GOPATH`
		local GOPATH_BREW_RELATIVE=`readlink $GOPATH`
		local GOPATH_BREW=`dirname $GOPATH_BREW_RELATIVE`
		export GOROOT=`cd $GODIR; cd $GOPATH_BREW/..; pwd`
	}
	setupGOROOT
fi
export GOPATH=$HOME/.go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Vimの設定

基本的にVim使いなのでVimにGo関連の設定を追加します。*1

まず、Goに付属のVim設定をftpluginとして追加します。

$ ln -s $GOROOT/misc/vim $HOME/.vim/ftbundle/go/vim-go

$GOROOTが変更された場合にvimプラグインも追従するように以下をbashの設定に加えます。

function setup_go_vim()
{
    local GO_VIM_PATH=$HOME/.vim/ftbundle/go/vim-go
    if [ -e $GO_VIM_PATH ]; then
        local CURRENT=`readlink $GO_VIM_PATH`
        local NEW=$GOROOT/misc/vim
        if [ "${CURRENT}" != "${NEW}" ]; then
            rm $GO_VIM_PATH
            ln -s $NEW $GO_VIM_PATH
        fi
    fi
}
setup_go_vim

さらに、補完を便利にするためにgocodeを追加します。

go get -u github.com/nsf/gocode
ln -s $GOPATH/src/github.com/nsf/gocode/vim $HOME/.vim/ftbundle/go/gocode

さらに、neocomplcacheと連携して自動で補完を起動する設定を行います。

if !exists('g:neocomplcache_omni_patterns')
    let g:neocomplcache_omni_patterns = {}
endif
let g:neocomplcache_omni_patterns.go = '\h\w*\.\?'


*1:unbundleの場合の設定です