Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go_2のドラフトを読む__エラー編_.pdf

take_cheeze
October 04, 2018
1.5k

 Go_2のドラフトを読む__エラー編_.pdf

take_cheeze

October 04, 2018
Tweet

Transcript

  1. Golangの二大よく言われるやつ - Golang 2で改善される予定らしい - エラー処理だるい - interface{} のチェックがガバガバ(または多相型くれ) -

    両方ざっくり読んでるけど、今回はエラー処理の方 - 今回は読書感想文なので気構えず - 公式ドキュメントやRFCは読むと楽しいのでおすすめ
  2. 案の構成 1. 問題提起 a. 問題点 b. 他の言語での解決方法 2. 案 a.

    checkキーワード b. handleキーワード c. 既定ハンドラー
  3. 現状のエラー処理の問題点 - 定型処理のくせに長い - `if err != nil { return

    err }` を多値返却のエラー確認の度に書く - 更にgofmtすると3行になって、本来の処理より長くなることが - エラーチェックがけっこう漏れる - 戻り値のチェックをしなくても怒られない - エラーは基本的に全部して、必要のないものから除外する方が後々、楽
  4. 他の言語での例 - Rust - 関数型言語っぽい安全方向にふっている - エラー確認をしないと結果が取り出せない - Swift -

    既存の例外処理っぽさがある( catchしないといけない) - 例外処理のめんどくさいところをだいぶなくしてる - バランスとってる感じ? - Rustに寄せようとしてるところも?
  5. handle文 - 例外処理でcatch文に書いていることを書く - エラーにスタック情報のメタデータを追加するときに利用 - 連鎖させることができる - 宣言順の逆順に実行(スタック構造) -

    returnで先に宣言されたものを上書き可能 - 特に宣言のない場合、既定のに - ゼロ初期化の他の戻り値 - 最後の戻り値だけエラー返却
  6. check式 - checkに続く式の最後の戻り値を判定する - foo(check bar())みたいな書き方も可能 - この場合、bar()の戻り値をチェックしてから foo()が呼ばれる -

    書いてあった展開例がわかりやすい - 構文を見る限り、checkは単項演算子扱い - 更に単項演算子を重ねられる - *(check foo())みたいな逆参照を使う書き方をできる
  7. おまけ: Go 2 Draft Designs フィードバック会 - 9/27に日本でやっていたらしい - フィードバック結果を読んでも楽しかった

    - エラー値&エラーハンドリング : http://bit.ly/go2-error-feedback-ja - ジェネリクス: http://bit.ly/go2-contracts-feedback-ja - 日本語で識者の意見を読めるのは有意義