はじめに
@nasa9084氏が講師として開催したGolang101というイベントの第1回に、TAとして参加してきました。
ふだんわたしはWomenWhoGoTokyoのスタッフとして初心者向けの勉強会で教えたり教わったりする立場ですが、それ以外のコミュニティでTAをするのは初めてでした。
スタバの看板があります #golang101 pic.twitter.com/nqdrV2H7DG
— nasa9084@某某某某(0x1a) (@nasa9084) 2019年7月20日
今日は久しぶりに自分以外男の人しかいない勉強会だ
— Momo Watanabe (@mom0tomo) 2019年7月20日
会の様子
nasa9084氏による力作!の資料をもとに、Go言語の構文等が基礎から丁寧に説明されました。
最初に書いたHello Worldを出力するプログラムのgo buildはみんな問題なく実行できて、開発環境構築で詰まった人もおらず順調な滑り出しでした。みんなちゃんと事前準備してきてえらい。
型推論ができる :=
演算子がよく利用されることについて「型を明示的に書いた方がよいのではないか?」という質問がありましたが、この演算子を用いた宣言と代入を行えるのは関数内だけなので、何もしなくてもスコープは限定的になるので問題ないと説明してもらいました。確かにそうだ。
また講義前半の質問タイムでは、sliceについての質問が複数挙がりました。slice、言葉の説明だけで理解するのは難しいですよね…可変長の配列として使うことが多く、使ってみると意外と理解しやすいので、the go playgroundでいろいろ試してみるのがおすすめです。
ちなみにわたしも「sliceは参照渡しなので、sliceに新しく値を代入すると背後にある(Sliceの元になっている)配列の値も変わる」というのを理解するために、playgroundで実験しました。
https://play.golang.org/p/80k2ohNW7LT
package main
import "fmt"
func main() {
var ns2 = []int{10, 20, 30, 40, 50}
fmt.Println(ns2) // [10 20 30 40 50]
ns3 := ns2[1:2]
fmt.Println(ns3) // [20]
ns3[0] = 100
fmt.Println(ns3) // [100]
fmt.Println(ns2) // [10 100 30 40 50]
}
資料に添付されているplaygroundリンク内のプログラムを書き換えて実行しても元の内容は破棄されません。そしてシェアするときには新たにリンクが発行されるので、気楽に使ってみるのがオススメです。
またポインタ型の話では、最初に理解しておくとつまずかないポイントとして「ポインタは定義するときもを使用し、ポインタから値をとるときもを使用する」ので混乱しがちだから気をつけようという解説がありました。
そしてGoのゼロ値のお話。
また出てきたゼロ値!コンポジット型(構造体とか)のゼロ値についてもここに書いてあるよhttps://t.co/n2iOP1QM1G#golang101
— Momo Watanabe (@mom0tomo) 2019年7月20日
さらにオブジェクト指向の言語などではおなじみのclassがGoにはなくて、代わりに構造体を使うというお話。
このあたりから実際に自分で書いて振り返りしてみるとよさそうな内容になってきました。ポインタやslice、構造体などはthe go playgroundでいろいろ書き換えて実行してみると、一気に身近になると思います。
続くハンズオンでは、コマンドライン引数から値を取得してFizzBuzzしてみようという課題をみんなでやってみました。
コマンドライン引数の取得方法や、割り算して余りを出すための演算子、strconv.Atoiは戻り値が2つあること、switchはデフォルトでbreakすること、forの書き方など、初心者がハマるポイントがたくさん詰まっていてTAとして張り切ってヘルプできるとても良い課題でした。
早く終わった人は追加実装もしていました。
課題1のポイント:
— Momo Watanabe (@mom0tomo) 2019年7月20日
- 割り算してあまりを返すには%を使う
- flag.Arg()を取得する前にはflag.Parse()するのを忘れずに
- strconv.Atoiは戻り値が二つある(文字列からコンバートした数値と、err)
- 戻り値が複数ある場合はnum, err := strconv.Atoiみたいに書ける
#golang101
ほんとうはこの後もアプリケーションをつくってみるハンズオン課題があったのですが、やはり4時間では尺が足りない、ということで各自持ち帰ってやってみることになりました。
課題を解いてみて質問があったら@nasa9084 氏にDM・メンションしてみよう!#golang101
— Momo Watanabe (@mom0tomo) 2019年7月20日
おわりに
すごく楽しかったです!
公務員からプログラマになるまで寄り道しながらよちよち歩いてきた自分が、イベントでTAをやることになるとは感慨深いです。
そして今回のイベントはnasa9084氏のていねいな説明のおかげで改めてGoの理解が進みました。すばらしい資料と課題をありがとうございました。
フィードバック次第で次回も開催してくれるかもしれないので、参加者のみなさんはぜひイベント後アンケートにもお答えくださいね!