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
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
470
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
130
はじめてのカスタムエージェント【GitHub Copilot Agent Mode編】
satoshi256kbyte
0
150
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
180
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
300
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
350
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
6
1.9k
GISエンジニアから見たLINKSデータ
nokonoko1203
0
190
Grafana:建立系統全知視角的捷徑
blueswen
0
280
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
220
これならできる!個人開発のすゝめ
tinykitten
PRO
0
150
Featured
See All Featured
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
230
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
100
Color Theory Basics | Prateek | Gurzu
gurzu
0
170
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
45
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
35
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
190
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
780
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
58
41k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
How to Ace a Technical Interview
jacobian
281
24k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
160
Amusing Abliteration
ianozsvald
0
84
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ͷͲΜͳ͜ͱ͕͖Ͱ͔͢?
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ