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())
    }
}
感想

すごく面白かった。終わったあともGoroutineとかの項目が気になってTour of Goは最後までやってしまった。

Go弱の会は6人しかいなかったけど、疑問があれば逐次的に議論したり、色々確認したりして進めることが出来て、非常に有意義な時間だった。

こういう会は少人数で手を動かすヤツのほうが為になることが多いなぁと思った。

mogettaさんにGoでWebアプリ作る時何がいいか聞いてみたら、revelっていう奴がWAFとして出ている、という話を聞いたので、今度はこれを触ってみようかと思ってます。

何か作ったら公開します!!