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
プログラミング歴半年のRubyistがGoを学び始めて戸惑った点
Search
Sho Nagata
May 27, 2019
1
870
プログラミング歴半年のRubyistがGoを学び始めて戸惑った点
2019/5/27 Goあんこ LT大会 6kg での発表資料です。
Sho Nagata
May 27, 2019
Tweet
Share
More Decks by Sho Nagata
See All by Sho Nagata
チームスローガンとその設計意図
nagata03
0
420
0→1フェーズのプロダクト開発のリアル
nagata03
0
260
スクラムマスターの悩みどころを赤裸々に告白します
nagata03
1
1.5k
SmartHRにおけるスクラムマスターへの道
nagata03
0
310
競技プログラミングにチャレンジ!
nagata03
0
390
1年間Rubyを使って印象的だったあれこれ
nagata03
0
430
Railsのコードを読んでみる vol.1
nagata03
0
380
コードを見る!書く!見てもらう!で爆速ステップアップ!!
nagata03
1
2.6k
method_missingの黒魔術っぷりについて
nagata03
0
420
Featured
See All Featured
Writing Fast Ruby
sferik
628
61k
YesSQL, Process and Tooling at Scale
rocio
170
14k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.4k
The World Runs on Bad Software
bkeepers
PRO
66
11k
Adopting Sorbet at Scale
ufuk
74
9.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
RailsConf 2023
tenderlove
29
970
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
GitHub's CSS Performance
jonrohan
1030
460k
Building an army of robots
kneath
302
45k
BBQ
matthewcrist
85
9.4k
Transcript
ϓϩάϥϛϯάྺͷ Rubyist͕ GoΛֶͼ࢝Ίͯށͬͨ @nagata03
ࣗݾհ • Sho Nagata • όοΫΤϯυΤϯδχΞˏΧΧΫίϜ • ৯ϩάͷϚΠΫϩαʔϏεԽΛਪਐத • Ruby
/ Railsʢྺ9ϲ݄ʣ • GoΛֶͼ࢝Ίͯ3ϲ݄ • ͖ͳݴޠPython ˏs_naga03 Sho Nagata nagata03
ʹͳΓ͍ͨ ͕͖ͳ ist
GoΛֶͼ࢝Ίͯށͬͨ͜ͱ 1. ྫ֎ػߏ͕ͳ͍ 2. ΠϯλϑΣʔεͬͯͳΜͧʁ
1. ྫ֎ػߏ͕ͳ͍ • Goʹྫ֎ػߏ͕ͳ͍ʢRubyͰݴ͏ begin~rescue~end ͕ͳ͍ʣ • ؔෳͷΓΛฦ͢Α͏ఆٛ • Τϥʔ༰ΛׂΓͯΔerrorܕͷมΛฦ͢Α͏ʹ͢Δ
• ؔͷΓͰΤϥʔ͕ൃੜ͔ͨ͠Ͳ͏͔Λࣔ͢
1. ྫ֎ػߏ͕ͳ͍ • ؔΛݺͼग़͢͝ͱʹifจͰΤϥʔఆ • ͘Ͳ͍ʁ • idiomԽͯͯ͠γϯϓϧ • ελοΫτϨʔεऔΕͳ͍
• pkg/errorsύοέʔδΛ͑ελοΫτϨʔεऔΕΔʂ͚Ͳ… • osύοέʔδͷOpenؔ • 2ͭͷΓerrorܕ
1. ྫ֎ػߏ͕ͳ͍ Ҿ༻ɿeurekaϒϩάʮGoݴޠʹ͓͚ΔΤϥʔϋϯυϦϯάΛࠓҰৼΓฦΔʯ
2. ΠϯλϑΣʔεͬͯͳΜͧʁ • ܕͷҰछ • ܕͷॊೈੑΛ୲อ͢Δ • ʮͲͷΑ͏ͳϝιουΛ࣮͢Δ͖͔ʯΛنఆ
3. ΠϯλϑΣʔεͬͯͳΜͧʁ errorΠϯλϑΣʔεΛ࣮͢Δʹ stringܕͷมΛฦ͢Error()ϝιουΛ࣮͢Εྑ͍ MyErrorܕʹerrorΠϯλϑΣʔεΛ࣮ MyErrorܕerrorܕͱͯ͠ѻ͑Δ ߏମͷMyErrorܕΛఆٛ
3. ΠϯλϑΣʔεͬͯͳΜͧʁ fmtύοέʔδfmt.StringerΠϯλϑΣʔεΛ࣮ͨ͠ܕͰ͋Ε Stringϝιου͕ฦ͢จࣈྻΛग़ྗʹ༻ͯ͘͠ΕΔɻ https://github.com/golang/go/blob/master/src/fmt/print.go Tܕʹfmt.StringerΠϯλϑΣʔεΛ࣮
2. ΠϯλϑΣʔεͬͯͳΜͧʁ • interface{}ܕ͋ΒΏΔܕͱޓੑΛ࣋ͭʁ - ͋ΒΏΔܕinterface{}ܕͱͯ͠ѻ͑Δ - ͦͷٯΓཱͨͳ͍
2. ΠϯλϑΣʔεͬͯͳΜͧʁ • ͋Δܕ͕ͲͷΠϯλϑΣʔεΛ࣮͍ͯ͠Δ͔͙͢Θ͔ Δͷʁ - godocίϚϯυʁ - go/typesύοέʔδʁ
·ͱΊ • Goʹྫ֎ػߏ͕ͳ͍ - ྫ֎ػߏ͕ͳͯ͘͘͢͝ࠔΔʂͱ͍͏͜ͱͳͦ͞͏ - ࣮ࡍGoΛ͍ͬͯΔαʔϏεͰͲͷΑ͏ʹΤϥʔϋϯυϦϯάͯ͠ ͍Δͷ͔Γ͍ͨ • ΠϯλϑΣʔεΛ͏͜ͱͰܕΛॊೈʹѻ͑Δ
- ͍ํΛݟ͍ͯΔ͏ͪʹҿΈࠐΊͯ͘Δ - ͲͷΠϯλϑΣʔεΛ࣮͍ͯ͠Δͷ͔Ͳ͏ͬͯௐΔʁ
ࢀߟจݙ • ॻ੶ - ʮελʔςΟϯάGoݴޠʯ • eurekaϒϩά - ʮGoݴޠʹ͓͚ΔΤϥʔϋϯυϦϯάΛࠓҰৼΓฦΔʯ •
Qiita - ʮΠϯλϑΣʔεͷ࣮ύλʔϯ #golangʯ@tenntenn • GitHub - ʮgo/golang ϦϙδτϦʯ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ