Slide 1

Slide 1 text

The Go gopher was designed by Renée French. The gopher stickers was made by Takuya Ueda. Licensed under the Creative Commons 3.0 Attributions license. errorsパッケージを 読む 2022年02月05日(土) 資料:https://tenn.in/errors-reading

Slide 2

Slide 2 text

上田拓也 Go ビギナーズ
 Go Conference
 @tenntenn tenntenn.dev Google Developer Expert (Go) 一般社団法人 Gophers Japan 代表理事 Experts Team

Slide 3

Slide 3 text

tenntenn Conference 2022にて https://tenn.in/codereading

Slide 4

Slide 4 text

復習

Slide 5

Slide 5 text

コードリーディング ■ 標準パッケージを読む ● 古くはGo研でも行われていた ● https://devblog.thebase.in/entry/go-code-reading ● https://future-architect.github.io/articles/20200310/ ■ 準備の少ないコードリーディング会 ● お題(読むパッケージ)を決める ● 選んだお題に期待することを当日話す ● 時間を決めてみんなでそれぞれ読む(20分とか) ● 読みながらSlackのスレッドにメモをしていく ● 残りの時間で気になったところを議論する ● 自分が気づけなかった点を知ることができる

Slide 6

Slide 6 text

コードが読みやすいツール ■ Google Open Sourceを使う ● https://cs.opensource.google/go ● 標準パッケージや準標準パッケージのソースコードが見れる ● pkg.go.devから辿れる ● 識別子の参照や変更履歴などが追える

Slide 7

Slide 7 text

blameして経緯を知る ■ なぜその実装になっているのか知ろう ● blameからGerritをたどりissue番号を特定する blameパネルが開く Gerritが開く

Slide 8

Slide 8 text

バージョンごとの実装が見れる ■ ブランチやタグを切り替える ● どのバージョンでその実装になったか調べる ● masterと最新リリース版の違いを調べる

Slide 9

Slide 9 text

アウトラインからアクセス ■ アウトラインパネルを使う ● フィルターなどもかけられる ● クリックすると定義位置までジャンプする

Slide 10

Slide 10 text

検索を使いこなす ■ 充実した検索機能 ● https://developers.google.com/code-search/reference ● class:で型名で検索できる ● func:で関数名で検索できる ● 検索範囲(プロジェクトやディレクトリ)を指定できる

Slide 11

Slide 11 text

errorsパッケージを読もう ■ 普段何気なく使っている機能の裏側を覗こう ● https://cs.opensource.google/go/go/+/master:src/errors/ ● errors.Newが返す値は実際何? ○ 構造体でNew("A") == New("A")がfalse ● errors.Is関数やerrors.As関数の挙動を知る ● ラップされたエラーはどうやって扱ってるの? ● reflectliteパッケージとは? ○ 循環参照を避けるために導入されたパッケージ ● インタフェースのreflect.Type型の値を取得するには?

Slide 12

Slide 12 text

リーディングタイム!!

Slide 13

Slide 13 text

まとめ ■ Goの標準パッケージはお宝 ● Goで書かれているの読めるぞ! ● pkg.go.devから辿って行ける ● blameして過去の経緯を知ろう ■ コードリーディング会は楽しい ● 自分だけでは気づかなかった点が知れる ● 一人では諦めてしまう低レイヤーな実装も頑張れる ● 議論の中から新しいアイデアや知見が見つかる