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
猫の手も借りたい!ので AIエージェント猫を作って社内に放した話 Claude Code × Container Lambda の Slack Bot "DevNeko"
naramomi7
0
260
New in Go 1.26 Implementing go fix in product development
sunecosuri
0
380
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
330
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
250
TROCCOで実現するkintone+BigQueryによるオペレーション改善
ssxota
0
150
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
3
1.2k
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
13
2.7k
手戻りゼロ? Spec Driven Developmentとは@KAG AI week
tmhirai
1
170
オブザーバビリティ駆動開発って実際どうなの?
yohfee
3
760
AI活用のコスパを最大化する方法
ochtum
0
130
CSC307 Lecture 15
javiergs
PRO
0
230
あなたはユーザーではない #PdENight
kajitack
4
340
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.7k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
97
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
The SEO identity crisis: Don't let AI make you average
varn
0
400
WENDY [Excerpt]
tessaabrams
9
36k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
61
52k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
How to train your dragon (web standard)
notwaldorf
97
6.5k
Site-Speed That Sticks
csswizardry
13
1.1k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
220
Producing Creativity
orderedlist
PRO
348
40k
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ͷͲΜͳ͜ͱ͕͖Ͱ͔͢?
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ