memo
専用 slack workspace で自己紹介
slack で質問できるの便利
なんでやる?
Go コミュニティの発展のため
標準ライブラリが豊富
go を学ぶ
多くの企業、oss で採用されている
大規模開発に向いてる
パフォーマンスがよい
Go について
Go パッケージの読み込みは循環構造がない
必ず末端が存在する
開発ツール
fmt -s で冗長な書き方を直してくれる
vet コンパイラが発見できないエラーを見つけてくれる
errcheck は適切なエラー処理がされてるかチェックしてくれる
デバッグ
基本 Delve
GDB ってやつがある
講義
型推論は右辺が明らかな場合にやってくれる
代入演算子は文なので、関数の引数には入らない(引数は式
go は後置インクリメント
go は中括弧がある場合以外は ; を設置する
if 文の中で代入文を使える
出てきた場所の下で使える
switch
break は書かなくてもいいが、書いても動く
switch 文の方が if 文より読みやすい場合がある
定数は default の型を持っている
変数と定数の演算の場合は変数の型になる
定数は無限に数字を持てる
int64 の範囲に収まれば print したりできる
コンポジット型
配列、構造体、スライス、マップ
型リテラル
型の具体的な定義を書き下した型の表現方法
配列
go では配列は表立って使わない → スライス使うから
固定長のみ
要素数から推論することはできる
要素を指定しない場合型のデフォルトの値(ゼロ値)が入る
スライス
配列の一部分を切り出したもの
ポインタを持つ
make で初期化
スライスのゼロ値は nil
配列があること意識する = パフォーマンスへの意識
cap を超えて append すると配列の再確保が行われる
マップ
詳しく知りたい方は前回の gocon のキーノート参照
キーには == で比較できる型しか NG
make で初期化
key の存在確認ができる n, ok := m["hoge"]
n に value or int のゼロ値
ok に true or false
ユーザ定義型
type <型名> <型リテラル or 型名>
新しい型を定義する
値のコピー
代入ではコピーが発生している
ポインタ
値で渡される型の値に対して破壊的な操作を加える場合に使う
ポインタのポインタもある(go の値はコピーされるので
内部でポインタを用いているデータ型
スライス、マップ、チャネル
これらはポインタを使う必要がない
メソッド
レシーバと紐づけられた関数
データとそれに対する操作を紐づけるために用いる
引数は通常と同じ扱い
レシーバ
メソッドに関連づけられた変数
ポインタを使うことでレシーバへの変更を呼び出し元に伝える事ができる
質問コーナー
基本ポインタでよさそう
mercari ではパフォーマンスへの影響は出てから対策しようというスタンス