Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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.6k
Go_2のドラフトを読む__エラー編_.pdf
take_cheeze
October 04, 2018
Tweet
Share
More Decks by take_cheeze
See All by take_cheeze
goluaをさわってみる
takecheeze
0
350
html5everをスクリプト言語から呼ぶ
takecheeze
0
240
mgemのCIを支える諸々
takecheeze
2
550
fukuoka.rb 祝 #100!
takecheeze
0
630
dep ensure浅掘り
takecheeze
0
440
LuaJIT as a Ruby backend
takecheeze
1
3.7k
Fukuoka Ruby Award 10th
takecheeze
1
260
コンパイル時計算への招待.pdf
takecheeze
1
1.4k
mrubyにとるRubyのシングルバイナリ運用
takecheeze
0
1.3k
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
69k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
GitHub's CSS Performance
jonrohan
1032
470k
Unsuck your backbone
ammeep
671
58k
Facilitating Awesome Meetings
lara
57
6.7k
Docker and Python
trallard
46
3.7k
Writing Fast Ruby
sferik
630
62k
Six Lessons from altMBA
skipperchong
29
4.1k
Site-Speed That Sticks
csswizardry
13
990
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 - 日本語で識者の意見を読めるのは有意義