読者です 読者をやめる 読者になる 読者になる

golangでコマンドラインツールを作る #2 ビルドしてコマンドを実行する

f:id:masato47744:20150816150451p:plain

その1の続きです。

開発環境

早速開発してみる。まずは、開発環境を何にするか問題。 IDEはちょっと大変かなってことでatomでやってる人もいそうなので、それでやってみる。

ATOMでGolangの環境設定 - Qiita

を参考にとにかく入れてみる。go-plusのsettingsが出てこなかったけど再起動したらいけた。 多分syntaxハイライトできてるしよさそう。

開発の進め方

Go言語のインストール - golang.jpにのってたHow to Write Go Code - The Go Programming Languageに、go installみたいなの書いてあるから開発したら、これで確認してくのかな?

ためしに、list.goに以下のようにimport文でfmtをimportしてみるように書いて保存すると、、強制的に元に戻される。なんじゃこりゃw

import(
    "fmt"
)

書き方が間違ってるから強制的に元に戻っちゃうのかな?よくわからん。書き換えてないのに、go-plusのところにはwarningでてるし。

色々悩んでいてふとひらめいた。fmtを使ってないのに、fmtをimportしようとしてるからなんか整理されちゃってるんじゃないかって。 きっと、色々プラグイン入れたからうまいこと保存時にフォーマットされるようになってるんじゃないかと予想。ためしに、関数の中に、fmt.Println("")ってのを書いておいたら大丈夫だった。 ふむ、余計なものをimportするなってことか。

あと、go-plusのエラーで exported function CmdList should have comment or be unexportedって出てる。 うーん。documentかけってことかなと思って色々javadoc的なもの書いてみても消えない。 waning messageに関数名から始めろみたいに書いてあるからまさかと思って、CmdListから始めてみたら・・

// CmdList print list
func CmdList(c *cli.Context) {

warning消えたw

なんかわかってきたかも知れない。ためしに、list.goを以下のように書いてgo installしてみる。

package command

import (
    "fmt"

    "github.com/codegangsta/cli"
)

// CmdList prints list
func CmdList(c *cli.Context) {
    // Write your code here
    fmt.Println("hello world")
}

そして、そのまま xgodeprojって打っても not foundになっちゃうから別シェル立ち上げて打ったら出てきた!

$ xgodeproj list
hello world

よし、なんかいけそうだ。

ここまでの感想

Atomでやってみはじめたけど、予測変換出てくるし、gofmtがあるから勝手にそれっぽくしてくれる。 あとは、ビルド方法が go installして別シェル立ち上げてってのがなんか面倒だな。きっともっといい方法あるんだろうな。 あと、テストをどう書けばいいか想像つかないけどそれは後回しにしよう。

その3