Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Go_2のドラフトを読む__エラー編_.pdf
Search
take_cheeze
October 04, 2018
0
1.4k
Go_2のドラフトを読む__エラー編_.pdf
take_cheeze
October 04, 2018
Tweet
Share
More Decks by take_cheeze
See All by take_cheeze
goluaをさわってみる
takecheeze
0
280
html5everをスクリプト言語から呼ぶ
takecheeze
0
200
mgemのCIを支える諸々
takecheeze
2
520
fukuoka.rb 祝 #100!
takecheeze
0
550
dep ensure浅掘り
takecheeze
0
360
LuaJIT as a Ruby backend
takecheeze
1
3.2k
Fukuoka Ruby Award 10th
takecheeze
1
210
コンパイル時計算への招待.pdf
takecheeze
1
1.2k
mrubyにとるRubyのシングルバイナリ運用
takecheeze
0
1.1k
Featured
See All Featured
What the flash - Photography Introduction
edds
67
11k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
326
21k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
166
48k
Designing Experiences People Love
moore
138
23k
Testing 201, or: Great Expectations
jmmastey
36
7k
Why Our Code Smells
bkeepers
PRO
334
56k
Web development in the modern age
philhawksworth
204
10k
The Straight Up "How To Draw Better" Workshop
denniskardys
230
130k
Navigating Team Friction
lara
183
13k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
25
1.3k
From Idea to $5000 a Month in 5 Months
shpigford
379
46k
Transcript
Go 2のドラフトを読む ~エラー処理編~ by @take-cheeze
自己紹介 - 普段はRails書いておいります - Golangは、パッケージ管理がだるいときに書きます - フロントエンドではElmはいいぞって言って異端扱い
Golangの二大よく言われるやつ - Golang 2で改善される予定らしい - エラー処理だるい - interface{} のチェックがガバガバ(または多相型くれ) -
両方ざっくり読んでるけど、今回はエラー処理の方 - 今回は読書感想文なので気構えず - 公式ドキュメントやRFCは読むと楽しいのでおすすめ
タッチバーの正しい使い方 - https://twitter.com/NateTheFinch/status/899730215957561344 - タッチバー付きの機種持っていない - ルガーランスはちゃんと刺してから使いましょう
案の構成 1. 問題提起 a. 問題点 b. 他の言語での解決方法 2. 案 a.
checkキーワード b. handleキーワード c. 既定ハンドラー
現状のエラー処理の問題点 - 定型処理のくせに長い - `if err != nil { return
err }` を多値返却のエラー確認の度に書く - 更にgofmtすると3行になって、本来の処理より長くなることが - エラーチェックがけっこう漏れる - 戻り値のチェックをしなくても怒られない - エラーは基本的に全部して、必要のないものから除外する方が後々、楽
他の言語での例 - Rust - 関数型言語っぽい安全方向にふっている - エラー確認をしないと結果が取り出せない - Swift -
既存の例外処理っぽさがある( catchしないといけない) - 例外処理のめんどくさいところをだいぶなくしてる - バランスとってる感じ? - Rustに寄せようとしてるところも?
案 - 構文とキーワードが2つ追加 - エラー処理を記述する handle - エラー確認を展開する check -
`handle` が宣言されない場合のエラーハンドラー
handle文 - 例外処理でcatch文に書いていることを書く - エラーにスタック情報のメタデータを追加するときに利用 - 連鎖させることができる - 宣言順の逆順に実行(スタック構造) -
returnで先に宣言されたものを上書き可能 - 特に宣言のない場合、既定のに - ゼロ初期化の他の戻り値 - 最後の戻り値だけエラー返却
check式 - checkに続く式の最後の戻り値を判定する - foo(check bar())みたいな書き方も可能 - この場合、bar()の戻り値をチェックしてから foo()が呼ばれる -
書いてあった展開例がわかりやすい - 構文を見る限り、checkは単項演算子扱い - 更に単項演算子を重ねられる - *(check foo())みたいな逆参照を使う書き方をできる
雑感 - 短く書けるのは単純に嬉しい - handle文の連鎖ははまりそう - Rustのmatch式でreturnできるのやっぱりずるい - RAII的な処理が大変そうだけど -
コンパイラつよい - 暗黙のチェックがやはり弱そう(そうゆう言語なので
おまけ: Go 2 Draft Designs フィードバック会 - 9/27に日本でやっていたらしい - フィードバック結果を読んでも楽しかった
- エラー値&エラーハンドリング : http://bit.ly/go2-error-feedback-ja - ジェネリクス: http://bit.ly/go2-contracts-feedback-ja - 日本語で識者の意見を読めるのは有意義