KLab若手エンジニアの これなぁに?

KLab株式会社の若手エンジニアによる技術ブログです。phpやRubyなどの汎用LLやJavaScript/actionScript等のクライアントサイドの内容、MySQL等のデータベース、その他フレームワークまで幅広く面白い情報を発信します。

2013年07月

第二回 豪快にGO会


こんにちは。ehama-kです。
7/11(木)に開催された2回目のGo言語の勉強会のレポートをお送りします。

「Tour of Goでハンズオン!」
 
IMG_0184






















今回は「Tour of Goでハンズオン!」ということで、ハンズオン形式で参加者がそれぞれGo言語の開発環境を構築したり、Tour of Go(Go言語の基礎文法学習ツアー)を進めたりしました。

LiteIDE
コンパイラ

Tour of Go
http://go-tour-jp.appspot.com/

Go Playground


開発環境の構築に苦戦したりTour of Goの途中でハマりながらの勉強会でしたが、そんな中で最も話題に上がったことは「Closure」でした。

Go言語に限らない話ですが、Closureを用いる際には注意する点があります。
例えば、以下のようなコードを書きます。

package main
import "fmt"
func foo() []func() int {
fs := make([]func() int, 3)
for i:= 0; i < len(fs); i++ {
fs[i] = func() int {
return i
}
}
return fs
}
func main() {
fs := foo()
for _, f := range fs {
fmt.Println(f())
}
(http://play.golang.org/p/HbKk1749Sk)

fooは単にintを返す関数であり、私は普通に 0, 1, 2 と出力されるものだと思っていました。
しかし、実際の実行結果は・・・

3
3
3

でした。
これは、それぞれの無名関数が参照する変数 i は、全て同じメモリー領域を指すため、インクリメントされた最終結果がそれぞれの関数から使用されるからです。
この場合、i はfor文の条件式に当てはまらなくなるまで(i<len(fs)が成立しなくなるまで)インクリメントされるので、
最終的な i は3となります。

0, 1, 2と出力させたい場合は

package main
import "fmt"
func foo() []func() int {
fs := make([]func() int, 3)
for i:= 0; i < len(fs); i++ {
j := i
fs[j] = func() int {
return j
}
}
return fs
}
func main() {
fs := foo()
for _, f := range fs {
fmt.Println(f())
}
}
(http://play.golang.org/p/n9aVZ5AGKz)


のように、for文の中で新たに変数を宣言し、それをreturnする必要があります。
このように、closureを用いる場合は変数のscopeに注意しましょう。


次回のレポートもご期待ください!!




第一回 豪快にGo会

はじめまして。2013年新卒のehama-kです。 

このたび2013年新卒入社のメンバーを中心に、Go言語に関する勉強会を開くことになりました。 
先日、記念すべき第一回目のGo言語勉強会を豪快に開催したので、その様子をレポートさせて頂きます。

今回発表者はこの「豪快にGo会」を企画したtenntennです。


tenntenn 「GoroutineとChannelから始めるGo言語」
上田拓也


 

















もともと彼は学生時代からGo言語に触れてきたらしく、Go言語に対する熱は誰にも負けないそうです。
ちなみにこのスライドに映っているキャラクターはGopher君というGo言語のキャラクターです。


内容:
・豪快にGo会について
・Go言語とは
・GoroutineとChannel
・基本的な文法

今回は第一回目ということで、Go言語の基本的な部分についてのお話でした。

1時間半の枠でしたが上記の内容の講義自体は30分程度で終了し、残りの時間は全て質疑応答でした。
質問攻めをされて苦笑いしているtenntennの姿がとても印象に残りました(笑)



第一回 豪快にGo会




















次回の開催日は未定ですが、2, 3週間に1回程度のペースで木曜日の19:00~20:30に開催する予定です。
今回参加者も新卒の方々が中心でしたが、次回は新卒だけでなく先輩社員にもぜひきて頂けたらと思います。
 KLab若手エンジニアブログのフッター