Quantcast
Channel: Big Sky
Viewing all articles
Browse latest Browse all 121

Vimを使ったGo言語開発手法

$
0
0
先日、Go言語バージョン1.1がリリースされました。安定しているのは勿論、幾つか新機能が追加されましたが、何よりもパフォーマンスチューニングが施された一番嬉しいですね。
Go 1.1 performance improvements | Dave Cheney

This is the first in a series of articles analysing the performance improvements in the Go 1.1 relea...

http://dave.cheney.net/2013/05/21/go-11-performance-improvements
さて今日はVimを使ってGo言語を開発する方法を紹介したいと思います。
VimでGo言語を開発するには、Go言語のリポジトリに含まれる misc/vimにランタイムパスを追加します。以下を vimrc に追加します。
setrtp+=$GOROOT/misc/vim

入力補完を行う

入力補完として gocode を入れます。正直、これは必須と言っていいです。
$ go get github.com/nsf/gocode
を実行します。$GOPATH/binにインストールされるのでパスを通しておきましょう。
$GOROOTに入ってしまった人は一度削除して、$GOPATHを設定後にもう一度、上記のコマンドを実行します。
$GOPATHにインストールされているはずなので以下の様にvimrcに追加します。
exe "set rtp+=".globpath($GOPATH"src/github.com/nsf/gocode/vim")
gocodeを入れると、パッケージ名の途中であったり変数の後の "."をタイプした後<c-x><c-o>をタイプすると、あり得る関数名や、メソッド名がずらずらーっと補完出来ます。
gocode
その際、completeoptというオプションに previewを足しておくと、補完内容が詳細に表示されて分かりやすくなります。
set completeopt=menu,preview

パッケージをインポートする

Go言語でも、欲しい機能があればパッケージをインポートします。その際、いちいちファイルの先頭に移動して、importを追加したりしてませんか?上記のオフィシャルが提供しているVimプラグインを使っているのであれば、以下の様に実行しましょう。
:Import fmt
before
package main

func main() {
    fmt.Println("hello world")
}
after
package main

import (
    "fmt"
)

func main() {
    fmt.Println("hello world")
}
カーソルの移動もありませんので、引き続きコーディングが再開出来ます。また、コマンドの引数でパッケージ名の補完が効きます。net/htまでタイプして <tab>をタイプすれば net/httpを補完してくれますし、ありえる候補も補完してくれます。

ドキュメントを見る

Go言語には godocというツールが付属しています。コマンドラインから使っても便利なのですが、Vimから使うともっと便利になります。
:Godoc net/http
godoc

:Importと同様にパッケージ名が補完出来ます。

整形する

Go言語には go fmtというコマンドが付属しており、相応しいソースに整形する事が出来ます。
インデントが崩れたりした場合でも
:Fmt
を実行するだけで、綺麗なソースコードに整形されます。

テンプレートを使う

手前味噌ですが、僕が作ってる sonictemplate-vimを使うと、ソースの書き始めが一気に楽になります。
mattn/sonictemplate-vim - GitHub
https://github.com/mattn/sonictemplate-vim
これを bundle ディレクトリ等に入れておき、goのファイルを新規で開きます。そこで
:Template web-app
を実行すれば以下のコードが展開されます。
package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/"func (w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "")
    })
    http.ListenAndServe(":8080"nil)
}
この後、http.ListenAndServe(":8080", nil)の1行上で空行を開け、:Template <tab>をタイプすると、web-app に特化した候補が優先的に表示されます。
sonictemplate
sonictemplate-vim はGo言語だけでなく、他の言語でも同様に便利なテンプレートが用意されています。よろしければ使ってみて下さい。また pull-req によるテンプレートの追加もお待ちしています。

これだけあれば、この夏のビーチでモテモテ間違いなしですね!

基礎からわかる Go言語基礎からわかる Go言語
古川 昇
シーアンドアール研究所 / ¥ 2,310 (2012-11-21)
 
発送可能時間:通常1~4週間以内に発送


Viewing all articles
Browse latest Browse all 121

Trending Articles