Submit Search
Upload
gotoは悪? Webフレームを自作する過程で Echo や Gin から学んだ正しいgoto の使い方.pdf
•
0 likes
•
479 views
K
keink
Follow
GoConference mini in Sendai LT枠 n9te9 の発表
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 11
Download now
Download to read offline
Recommended
Goとtest coverage
Goとtest coverage
nakaji-s
gopherと学ぶgolang ~go fmt編~
gopherと学ぶgolang ~go fmt編~
nakaji-s
Exgettextの話
Exgettextの話
k1complete
20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri
Yoshifumi Yamaguchi
こんにちはGroovy
こんにちはGroovy
irof N
Runtime c++editing
Runtime c++editing
Seiya Ishibashi
Lombok ハンズオン
Lombok ハンズオン
Hiroto Yamakawa
Programming camp Codereading
Programming camp Codereading
Hiro Yoshioka
Recommended
Goとtest coverage
Goとtest coverage
nakaji-s
gopherと学ぶgolang ~go fmt編~
gopherと学ぶgolang ~go fmt編~
nakaji-s
Exgettextの話
Exgettextの話
k1complete
20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri
Yoshifumi Yamaguchi
こんにちはGroovy
こんにちはGroovy
irof N
Runtime c++editing
Runtime c++editing
Seiya Ishibashi
Lombok ハンズオン
Lombok ハンズオン
Hiroto Yamakawa
Programming camp Codereading
Programming camp Codereading
Hiro Yoshioka
ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01
Takeshi Komiya
明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理
Yuto Matsukubo
Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察
貴仁 大和屋
PyCon APAC 2013 Web Secure Coding
PyCon APAC 2013 Web Secure Coding
Gouji Ochiai
いまさら聞けないRake入門
いまさら聞けないRake入門
Tomoya Kawanishi
20120525 mt websocket
20120525 mt websocket
Ryosuke MATSUMOTO
20160422_lombokについて
20160422_lombokについて
Hidaka Kazutaka
20140903groonga発表資料
20140903groonga発表資料
Hironobu Saitoh
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!
Oda Shinsuke
入門 シェル実装
入門 シェル実装
Yusuke Sangenya
Fabric Essentials
Fabric Essentials
Yoshinari Takaoka
初心者向けGo言語勉強会
初心者向けGo言語勉強会
leverages_event
Git tutorial
Git tutorial
Hiroki Kouchi
Go静的解析ハンズオン
Go静的解析ハンズオン
Takuya Ueda
Ingress on GKE/GCE
Ingress on GKE/GCE
shouta yoshikai
Programming camp 2008, Codereading
Programming camp 2008, Codereading
Hiro Yoshioka
Kanazawa.js.Next
Kanazawa.js.Next
dynamis
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
Takuya Ueda
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
dcubeio
すぐ始めれるクラウド
すぐ始めれるクラウド
Soudai Sone
More Related Content
Similar to gotoは悪? Webフレームを自作する過程で Echo や Gin から学んだ正しいgoto の使い方.pdf
ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01
Takeshi Komiya
明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理
Yuto Matsukubo
Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察
貴仁 大和屋
PyCon APAC 2013 Web Secure Coding
PyCon APAC 2013 Web Secure Coding
Gouji Ochiai
いまさら聞けないRake入門
いまさら聞けないRake入門
Tomoya Kawanishi
20120525 mt websocket
20120525 mt websocket
Ryosuke MATSUMOTO
20160422_lombokについて
20160422_lombokについて
Hidaka Kazutaka
20140903groonga発表資料
20140903groonga発表資料
Hironobu Saitoh
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!
Oda Shinsuke
入門 シェル実装
入門 シェル実装
Yusuke Sangenya
Fabric Essentials
Fabric Essentials
Yoshinari Takaoka
初心者向けGo言語勉強会
初心者向けGo言語勉強会
leverages_event
Git tutorial
Git tutorial
Hiroki Kouchi
Go静的解析ハンズオン
Go静的解析ハンズオン
Takuya Ueda
Ingress on GKE/GCE
Ingress on GKE/GCE
shouta yoshikai
Programming camp 2008, Codereading
Programming camp 2008, Codereading
Hiro Yoshioka
Kanazawa.js.Next
Kanazawa.js.Next
dynamis
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
Takuya Ueda
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
dcubeio
すぐ始めれるクラウド
すぐ始めれるクラウド
Soudai Sone
Similar to gotoは悪? Webフレームを自作する過程で Echo や Gin から学んだ正しいgoto の使い方.pdf
(20)
ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01
明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理
Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察
PyCon APAC 2013 Web Secure Coding
PyCon APAC 2013 Web Secure Coding
いまさら聞けないRake入門
いまさら聞けないRake入門
20120525 mt websocket
20120525 mt websocket
20160422_lombokについて
20160422_lombokについて
20140903groonga発表資料
20140903groonga発表資料
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!
入門 シェル実装
入門 シェル実装
Fabric Essentials
Fabric Essentials
初心者向けGo言語勉強会
初心者向けGo言語勉強会
Git tutorial
Git tutorial
Go静的解析ハンズオン
Go静的解析ハンズオン
Ingress on GKE/GCE
Ingress on GKE/GCE
Programming camp 2008, Codereading
Programming camp 2008, Codereading
Kanazawa.js.Next
Kanazawa.js.Next
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
すぐ始めれるクラウド
すぐ始めれるクラウド
gotoは悪? Webフレームを自作する過程で Echo や Gin から学んだ正しいgoto の使い方.pdf
1.
gotoは悪? Webフレームを自作する過程で Echo や
Gin から学んだ正しいgoto の使い方
2.
自己紹介 名前 中村 圭助 (n9te9
: ネクテック) Gopher歴 4~5年 好きなパッケージ sync, net/http 職種 サーバサイドエンジニア@DMM.com
3.
goto文を使ったことがありますか?
4.
goto の使い所 1. 変更が少ない箇所
(libとか) 2. 関数呼び出し事態が性能のボトルネックになっている時 (引数コピーとか) 3. トランザクションスクリプトを分割したい時 4. 深いネストから抜け出す時 (ラベル付き continue や break があるけど。。) → エッジケースだけどフレームワークやライブラリの局所的なところで使われている
5.
HTTPリクエストのルーティング (Echo, Gin) 大きく3つのロジックでハンドラを呼び出している 1.
静的ルーティング → URIが一意に定まる (e.g. /user/new) 2. パラメータルーティング → パスパラメータを含んだURI (e.g. /user/:id) 3. Anyルーティング → 上二つに当てはまらないルーティング全て (e.g. /user/*) 上記の順序で 基数木 を探索する
6.
ラベル付き continue vs
goto Gin : 1~3 ロジックを一つにまとめて、ラベル付き continue を使う Echo : 1~3のロジックをラベルで切り分けて、goto を使う どっちが読みやすい?
7.
サンプルコードで比べてみる 状態を見る if が必要になる START
に戻るので常に 状態を考慮する必要がある STATUS2, STATUS3 が関数のようになっている gocognit: 10 gocognit: 8 Status1 → Status2 → Status3 で遷移して Status3の値を出力する
8.
処理速度 大体 1.5倍くらい速い (おそらく
if 文で速度が落ちている ) goto が速いわけではないラベル付き continue と速度はほとんど同じ goto を使うことによって if 文を削れるなら高速化できる go test -bench でサンプルコードのベンチマークを取る
9.
まとめ - 変更が少ない箇所 (libとか) -
関数呼び出し自体が性能のボトルネックになっている時 (引数コピーとか) - トランザクションスクリプトを分割したい時 goto 文は一概に悪とは言えない ラベル付き continue, break 方が可読性や処理性能を下げている可能性もある
10.
紹介 webフレームワークを自作してます https://github.com/lkeix/jazzy まだ全然できていないのですが、OSSのwebフレームワークを作っています。 GoでのHTTPルーティング実装などに興味がある方は声をかけていただいたら嬉しいです。 最近は linter とかも作っているので興味がある方も気軽に話してください。
11.
おわり
Download now