Go弱の会でgolangデビューしてきた。 #gojaku
やっとgolangデビューしました。
とは言っても、一回Google Developers Daysで一回入門して、なんか書いたことはあったんですが、その時以来、全く書いてなくて、再入門した形になります。
せっかくなので、Go弱の会でやったことをまとめます。
Go install
Goのインストールから始まりました。
本当はgoenvとか使うといい感じに入れられるのかもしれないんですが、まずはスタンダードなインストールをする事に。
公式サイトからインストールするかbrewを使うか。
一応、brewを使って入れてみました。
$ brew install go
※ go 1.1が入らない!とか思ったらbrew updateのし忘れだった事は秘密、忘れないようにしましょう。
$ brew update $ brew install go
忘れずに、GOROOT、GOPATHを設定。
以下のexportをzshrcに追記。
export GOROOT="/usr/local/Cellar/go/1.1.1" export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin
- GOROOT : golangインストールルートフォルダ
- GOPATH : ユーザーのワーキングディレクトリ
GOROOTの記述をミスしたらgoの標準モジュールが読み込めなくなってしまったので、標準モジュールへのパスを通す意味もあるんだと思います。
GOPATHのbinにコンパイル後のバイナリができるので、そこにパスを通しておけば実行が簡単になります。
How to write go codeを基にgoの初歩的な使い方を学ぶ。
How to Write Go Code - The Go Programming Languageを基にgoのHello Worldを書いていきます。
まずは初期フォルダを作成します。
$ mkdir -p $GOPATH/src/github.com/user $ mkdir $GOPATH/src/github.com/user/hello
作成した $GOPATH/src/github.com/user/hello フォルダの下にhello.goファイルを作成し、内容を以下のようにしておきます。
package main import "fmt" func main() { fmt.Printf("Hello, world.\n") }
作成したら、goのバイナリを作成。
go install github.com/user/hello
go installはこれでもいいみたいですね。
$ cd $GOPATH/src/github.com/user/hello $ go install
go installに失敗する方は GOROOT と GOPATH の設定を再確認したほうが良いかもしれません。
GoのHello Worldを実行
$ $GOPATH/bin/hello Hello, world.
GOPATH/binをPATHに通している人は以下の方法でも実行出来ます。
$ hello Hello, world.
次にパッケージの記述方法を学ぶ
newmathフォルダを作成し、hello.goからそのモジュールを呼び出してみます。
$ mkdir $GOPATH/src/github.com/user/newmath
そのフォルダの下にsqrt.goを作成し、以下の内容にします。
// Package newmath is a trivial example package. package newmath // Sqrt returns an approximation to the square root of x. func Sqrt(x float64) float64 { z := 1.0 for i := 0; i < 1000; i++ { z -= (z*z - x) / (2 * z) } return z }
作成し終えたら、go buildでモジュール化します。
$ go build github.com/user/newmath
hello.goからnewmathモジュールを使用する。
package main import ( "fmt" "github.com/user/newmath" ) func main() { fmt.Printf("Hello, world. Sqrt(2) = %v\n", newmath.Sqrt(2)) }
書き終えたらgo install でhelloモジュールをinstallして再実行。
$ go install github.com/user/hello $ hello Hello, world. Sqrt(2) = 1.414213562373095
こんな感じで出ればモジュールの作成と利用は成功です。
とまぁこんな感じでHow to Write Go Code - The Go Programming Languageのステップを全て実施。
残りの時間で Tour of Goを実施。
残りの時間でTour of Goを実施。大体 #43のfibonacciを全員で解くところまでやって終了。
GoのFibonacciはこんな感じで解きました。
package main import "fmt" // fibonacci is a function that returns // a function that returns an int. func fibonacci() func() int { x, y := 0, 1; return func() int { x, y = x+y, x; return x; } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) } }