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.6k
Go_2のドラフトを読む__エラー編_.pdf
take_cheeze
October 04, 2018
Tweet
Share
More Decks by take_cheeze
See All by take_cheeze
goluaをさわってみる
takecheeze
0
340
html5everをスクリプト言語から呼ぶ
takecheeze
0
230
mgemのCIを支える諸々
takecheeze
2
540
fukuoka.rb 祝 #100!
takecheeze
0
620
dep ensure浅掘り
takecheeze
0
420
LuaJIT as a Ruby backend
takecheeze
1
3.6k
Fukuoka Ruby Award 10th
takecheeze
1
260
コンパイル時計算への招待.pdf
takecheeze
1
1.3k
mrubyにとるRubyのシングルバイナリ運用
takecheeze
0
1.3k
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
1k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
We Have a Design System, Now What?
morganepeng
53
7.7k
Practical Orchestrator
shlominoach
190
11k
Six Lessons from altMBA
skipperchong
28
4k
How GitHub (no longer) Works
holman
314
140k
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Designing for Performance
lara
610
69k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
283
13k
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 - 日本語で識者の意見を読めるのは有意義