Go読書会 #3 がランサーズ株式会社で行われたので進捗と技術的なメモ書きを書いておきます。読書会の内容はプログラミング言語Goを冒頭から皆で読み進めていくというものです。
進捗した内容
- 1章 チュートリアル
- 1.7 ウェブサーバ
- 1.8 残りの項目
- 2章 プログラム構造
- 2.1 名前
- 2.2 宣言
- 2.3 変数
- 2.3.1 省略変数宣言
話題に上がった話
1.7 ウェブサーバ
最近並列処理をGoで書こうとして色々困ったりしたのでどうやって処理をしているのか気になりまして、echoサーバーの実装のところでHandleFuncのコードを調査したりしてみました。HandleFuncは中でHandleを呼んでいて、そしてsync.RWMutexを使っていました。これで呼ばれたときにコントロールしてるんですね。
2116 type ServeMux struct {
2117 mu sync.RWMutex
2118 m map[string]muxEntry
2119 hosts bool // whether any patterns contain hostnames
2120 }
その後、一般的なGoのWeb開発について皆さんどうしているのですかという話題になりまして、素の標準ライブラリだけで開発している人も割といるらしいというのを良く聞いてますという話をしつつ、Web Frameworkを使って開発するケースが多いのではという話をしました。
後で調べたんですが、検索結果を見る限りはEchoが割と良く出てきます。ちょっと前まではRevelをよく見かけたのですがEchoの方が検索順位が良いですね。
2.1 名前
ここで気になったのは、Unicodeで文字とされている物がすべて名前として有効ということになっているという点です。つまり日本語で変数名が付けられると言うことです(エディタの設定等は必要ですが)。試しに以下の様に書いてみても正常に動作します。
package main
import "fmt"
func main() {
変数だよ := "hello"
fmt.Println(変数だよ)
}
あとは、名前をキャメルケースで書くパターンが多いという所と、関数の場合は名前の最初が大文字になるかならないかで公開(exported)が決まるというところが話題になりました。
2.3 変数
ここでは、var宣言がtypかexpressionのどちらかが有れば宣言出来ること、あとはよくみる省略変数宣言で、これはあくまで宣言で、=の代入とは違うことが書かれていてこの違いが話題になりました。
ここまで呼んだところで、時間になりました。次回は 2.3.2 ポインタからです。