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を選ぶ理由
Search
Koki Natsume
September 23, 2018
Programming
0
1.1k
僕がGoを選ぶ理由
Student Go #1 ビギナーズセッション 2 の発表資料です。
僕のGoの好きなところをまとめました。
Koki Natsume
September 23, 2018
Tweet
Share
More Decks by Koki Natsume
See All by Koki Natsume
5分で入門するFlutter
natumn
0
1.4k
New Business Card
natumn
0
1.1k
Other Decks in Programming
See All in Programming
一度始めたらやめられない開発効率向上術 / Findy あなたのdotfilesを教えて!
k0kubun
2
1.3k
我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026
shogogg
2
700
Agentic AI: Evolution oder Revolution
mobilelarson
PRO
0
210
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
6
1.1k
Ruby and LLM Ecosystem 2nd
koic
1
1.4k
AI時代の脳疲弊と向き合う ~言語学としてのPHP~
sakuraikotone
1
1.6k
AIと共にエンジニアとPMの “二刀流”を実現する
naruogram
0
100
The free-lunch guide to idea circularity
hollycummins
0
380
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
410
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.3k
AI 開発合宿を通して得た学び
niftycorp
PRO
0
180
PHP でエミュレータを自作して Ubuntu を動かそう
m3m0r7
PRO
2
150
Featured
See All Featured
Optimizing for Happiness
mojombo
378
71k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
160
Information Architects: The Missing Link in Design Systems
soysaucechin
0
850
YesSQL, Process and Tooling at Scale
rocio
174
15k
Google's AI Overviews - The New Search
badams
0
950
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
400
Exploring anti-patterns in Rails
aemeredith
2
300
30 Presentation Tips
portentint
PRO
1
260
Building Adaptive Systems
keathley
44
3k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
160
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Transcript
͕ ɹɹ ΛબͿཧ༝ 4UVEFOU(P ϏΪφʔηογϣϯ
ࣗݾհ ϋϯυϧωʔϜ: natumn/natumndb ֶߍ: ձେֶ ֶ෦3ੜ GoͰ͍ͬͯΔ͜ͱ: • GAE/Go ʹΑΔαʔόʔαΠυͷ։ൃ
(ΞϧόΠτ) • CLI, slack botͳͲπʔϧ܈ͷ։ൃ (झຯ) • ֶ͚ݕࡧΤϯδϯweb-int-searcherͷ։ൃ (େֶͰͷ׆ಈ) • etc…
StudentGoͷϞνϕʔγϣϯ
ͬͱGoΛ͖ʹʂ
ࠓ͢͜ͱ
ॳ৺ऀͳ͕GoֶΜͰ͍͘աఔͰ͖ͳͬͨͱ͜Ζ
࣍ •ͳͥGoͭ͘ΒΕͨͷ͔ •͍ͭGoͰ͔͘ͷ͔ •GoΛֶͿ •ੜ࢈ੑΛ͋͛ΔͨΊʹ •·ͱΊ
ͳͥ(Pͭ͘ΒΕͨͷ͔ ͳͥGoogle Go Λ͔ͭͬͨ͘
Go at Google: Language Design in the Service of Software
Engineering ͳͥ(Pͭ͘ΒΕͨͷ͔
URL: https://talks.golang.org/2012/splash.article ͳͥ(Pͭ͘ΒΕͨͷ͔
github.com/golang/go/wiki ͳͥ(Pͭ͘ΒΕͨͷ͔
golang.org/doc FAQ ͳͥ(Pͭ͘ΒΕͨͷ͔
GoogleͰେنͳιϑτΣΞΛ ։ൃ͢Δࡍʹൃੜͨ͠ʹର͢Δͻͱͭͷղܾࡦ ͳͥ(Pͭ͘ΒΕͨͷ͔
• ϚϧνίΞϓϩηοαͷීวԽʹ͏ϓϩάϥϛϯάݴޠ ͷαϙʔτ͕গͳ͍ • WebϓϩάϥϛϯάϞσϧʹ͋ͬͨݴޠ͕ͳ͍ʁ • ઍສߦͷίʔυ • ඦɺઍͷ։ൃऀɺ·ͨͦͷ։ൃڥ •
େنͳίʔυʹΑΔϏϧυ࣌ؒͷ૿Ճ Google๊͕͑ͨ ͳͥ(Pͭ͘ΒΕͨͷ͔
• खଓ͖ܕͱඇಉظϓϩάϥϛϯά, LLݴޠͷΑ͏ͳ؆୯͞, ੩తܕ͚Λ ߹ΘͤͨσβΠϯ • ։ൃऀͷબࢶΛڱΊΔγϯϓϧͳจ๏, ॻ͖ํͷ౷Ұ • ϥΠϒϥϦɺϑΥʔϚολ,
Ϧϯλ, ࣗಈੜͳͲπʔϧͷඪ४αϙʔτ Ͱॆ࣮ͤ͞Δ • γϯάϧόΠφϦ ͦͷղܾࡦͱͯ͠ͷGo ͳͥ(Pͭ͘ΒΕͨͷ͔
• खଓ͖ܕͱඇಉظϓϩάϥϛϯά, LLݴޠͷΑ͏ͳ؆୯͞, ੩తܕ͚Λ ߹ΘͤͨσβΠϯ • ։ൃऀͷબࢶΛڱΊΔγϯϓϧͳจ๏, ॻ͖ํͷ౷Ұ • ϥΠϒϥϦɺϑΥʔϚολ,
Ϧϯλ, ࣗಈੜͳͲπʔϧͷඪ४αϙʔτ Ͱॆ࣮ͤ͞Δ • γϯάϧόΠφϦ ͦͷղܾࡦͱͯ͠ͷGo ͳͥ(Pͭ͘ΒΕͨͷ͔ γεςϜͷεέʔϥϏϦςΟ ։ൃͷεέʔϥϏϦςΟ
• GoϓϩάϥϜGorutineͱݴΘΕΔܰྔεϨουͰಈ͘ • GoͷϥϯλΠϜOSεϨου্ʹͦΕͧΕGroutineΛׂ Γͯͯεέδϡʔϧ͢Δ खଓ͖ͱඇಉظϓϩάϥϛϯάΛ߹ΘͤͨσβΠϯ ͳͥ(Pͭ͘ΒΕͨͷ͔ . ( 1
( ( running! waiting… ࢀߟਤ: GopherCon 2017: Kavya Joshi - Understanding Channels
• ྫ͑ɺϊϯϒϩοΩϯάIOͳͲͷͪঢ়ଶ͕ൃੜ͢Δͱ ผͳGroutine͕ಈ͖ग़͢ खଓ͖ͱඇಉظϓϩάϥϛϯάΛ߹ΘͤͨσβΠϯ ͳͥ(Pͭ͘ΒΕͨͷ͔ . ( 1 ( (
running! waiting… ࢀߟਤ: GopherCon 2017: Kavya Joshi - Understanding Channels
• ྫ͑ɺϊϯϒϩοΩϯάIOͳͲͷͪঢ়ଶ͕ൃੜ͢Δͱ ผͳGroutine͕ಈ͖ग़͢ खଓ͖ͱඇಉظϓϩάϥϛϯάΛ߹ΘͤͨσβΠϯ ͳͥ(Pͭ͘ΒΕͨͷ͔ . ( 1 ( (
running! waiting… ࢀߟਤ: GopherCon 2017: Kavya Joshi - Understanding Channels جຊతʹ։ൃऀ͕ͦ͜Λ ҙࣝ͠ͳͯ͘ Runtime͕উखʹඇಉظ ϓϩάϥϛϯάͯ͘͠ΕΔ!!!
• mapfilterͳ͠ͷforจʹΑΔ෮ॲཧ • ྫ֎ػߏͳ͠ͷ໌ࣔతͳΤϥʔϋϯυϦϯά • goͱ͔͚ͩ͘ฒྻॲཧ͕Մೳ • interfaceʹΑΔநԽ, ίϯϙδοτͷ࣮ݱ •
։ൃऀ͕ϝϞϦཧͤͣʹ͢ΉGC͕͋Δ γϯϓϧͳจ๏ ͳͥ(Pͭ͘ΒΕͨͷ͔
• mapfilterͳ͠ͷforจʹΑΔ෮ॲཧ • ྫ֎ػߏͳ͠ͷ໌ࣔతͳΤϥʔϋϯυϦϯά • goͱ͔͚ͩ͘ฒྻॲཧ͕Մೳ • interfaceʹΑΔநԽ, ίϯϙδοτͷ࣮ݱ •
։ൃऀ͕ϝϞϦཧͤͣʹ͢ΉGC͕͋Δ γϯϓϧͳจ๏ ͳͥ(Pͭ͘ΒΕͨͷ͔ ։ൃऀ͕ॻ͚Δදݱ͕େମܾ·ͬͯ͘Δ
γεςϜͷεέʔϥϏϦΟ ͳͥ(Pͭ͘ΒΕͨͷ͔ Goͷඪ
ݱ࣮తͳΛղܾ͢ΔͨΊͷ߹ཧతͳݴޠ ͕͖ͦ͜͜ͷ̍ ͳͥ(Pͭ͘ΒΕͨͷ͔
ͨͪͲΜͳ࣌ʹඞཁ͔
͍ͭ(PͰॻ͘ͷ͔ ظʹΘͨͬͯෳਓͷ։ൃऀͰ։ൃɺӡ༻͍ͯͨ͘͠Ίͷ େنͳϓϩμΫτ, ༷ʑͳਓ͕৮ΔOSSͱͯ͠ • γϯάϧόΠφϦ • γϯϓϧͳจ๏
͍ͭ(PͰॻ͘ͷ͔ ඇಉظϓϩάϥϛϯάͱͯ͠ • ΞϓϦέʔγϣϯαʔόʔͷϓϩάϥϛϯά • IOͷଟ͍ϓϩάϥϜ
͕͖ͦ͜͜ͷ2 ͍ͭ(PͰॻ͘ͷ͔ ෳਓͰͷ νʔϜ։ൃ, αʔόʔαΠυϓϩάϥϛϯά ͕͍͢͠
͕͖ͦ͜͜ͷ2 ࣗͷ։ൃͱ͏·͍͜ͱϚον͍ͯͨ͠ ͍ͭ(PͰॻ͘ͷ͔ ෳਓͰͷ νʔϜ։ൃ, αʔόʔαΠυϓϩάϥϛϯά ͕͍͢͠
GoΛͲ͏ֶΜͰ͍ͬͨΒ͍͍ʁ
None
None
ͤʹͳΕͨ
ࣗͷྫ
(PΛֶͿ GoΛಡΉձ @ktr_0731, @acomagu, @Yamashou0314 ͱ͍ͬͯΔ झຯͷ͋͏༑ୡɺಉ྅ͱٞ͠ͳ͕ΒΔͱḿͬͨ
(PΛֶͿ GoProverbs,CodeReviewComments ͳͲͷߟ͑ΛͱʹίʔυΛಡΉ
(PΛֶͿ The bigger the interface, the weaker the abstraction. •
ioύοέʔδ Errors are values. Don’t just check errors, handle them gracefully. Don’t panic. • ύοέʔδͷ֤ॴ ྫ
(PΛֶͿ ͍ͬͺ͍ίʔυΛॻ͘
(PΛֶͿ GoGo͔ΒֶΔ ͕͖ͦ͜͜ͷ3
(PΛֶͿ ʮֶͿ্Ͱ͜Μͳ͜ͱΛΔͱ͍͍ʯ ͳͲ͋ͬͨੋඇڭ͑ͯཉ͍͠Ͱ͢ʂ
ޮԽ͍ͨ͠
ඪ४αϙʔτͷπʔϧɺϥΠϒϥϦ܈
ੜ࢈ੑΛ͋͛ΔͨΊʹ goίϚϯυ • Ϗϧυ • ςετ • όΠφϦͷऔಘ • ґଘؔͷཧʢv1.11͔Β)
• ϑΥʔϚολͳͲͷίʔυܗ • ܭଌπʔϧ • ίϯύΠϧ࣌ͷπʔϧ܈
ੜ࢈ੑΛ͋͛ΔͨΊʹ gofmt, linter, vet, lsp • ඪ४ͷίϚϯυͰϑΥʔϚολɺϦϯλʔ͕ೖ͍ͬͯΔ • ։ൃऀͦΕʹै͏͚ͩྑ͍ •
࠷ۙɺLanguage Server ProtocolʹGoඪ४Ͱαϙʔτ!!!
ੜ࢈ੑΛ͋͛ΔͨΊʹ ࣗಈੜ godocίϚϯυ • ίʔυίϝϯτ͔Β υΩϡϝϯτΛࣗಈ ੜ
ੜ࢈ੑΛ͋͛ΔͨΊʹ ࣗಈੜ • go generate • Test: gotests • Mock:
gomock, mockgen command • API: go-swagger, swaggo
ੜ࢈ੑΛ͋͛ΔͨΊʹ go/ast Λͬͨ੩తղੳ • GoͷͨΊͷGo
ੜ࢈ੑΛ͋͛ΔͨΊʹ ࣗͷࣄྫ
ੜ࢈ੑΛ͋͛ΔͨΊʹ [WIP] github.com/natumn/ddog cloud datastoreͷΤϯςΟςΟΠϯσοΫε༻ͷυΩϡϝ ϯτࣗಈੜͯ͘͠ΕΔCLIπʔϧ
։ൃͷεέʔϥϏϦΟ Goͷඪ ੜ࢈ੑΛ͋͛ΔͨΊʹ
ੜ࢈ੑΛ͋͛ΔͨΊʹ ඪ४αϙʔτͰੜ࢈తͳπʔϧ͕ͨ͘͞Μ͋Δ ͕͖ͦ͜͜ͷ4
·ͱΊ • GoGoogleͰى͖ͨݱ࣮తͳΛղܾ͢ΔͨΊʹੜ·Εͨݴ ޠ • ظɺେنͳϓϩμΫτʹదͨ͠ઃܭ • GoGo͔ΒֶΔ • ඪ४αϙʔτͰଟ͘ͷੜ࢈తͳπʔϧɺϥΠϒϥϦ͕ἧ͍ͬͯΔ
Έͳ͞ΜGoͷͲΜͳ͜ͱ͕͖Ͱ͔͢?
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ