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
Vaporモードを大規模サービスに最速導入して学びを共有する
kazukishimamoto
3
1.1k
Vitest Browser Mode への期待 / Vitest Browser Mode
odanado
PRO
1
770
tsconfig.jsonの最近の新機能 ファイルパス編
uhyo
7
1.9k
モジュラモノリス、その前に / Modular monolith, before that
euglena1215
8
750
perl for shell, awk and sed programmers
mackee
2
990
CSC509 Lecture 07
javiergs
PRO
0
130
フロントエンドの現在地とこれから
koba04
10
4.7k
Cloud Adoption Framework にみる組織とクラウド導入戦略
tomokusaba
2
680
急速に利用拡大を続ける飲食店向けサービスで 店内端末同士のローカル通信を追加設定なしで実現した話
whatasoda
0
140
CSC509 Lecture 04
javiergs
PRO
0
160
Subclassing, Composition, Python, and You
hynek
3
190
GPU Hash Table | レイトレ合宿10
yknishidate
0
230
Featured
See All Featured
A better future with KSS
kneath
237
17k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
43
6.6k
Six Lessons from altMBA
skipperchong
26
3.4k
How to Ace a Technical Interview
jacobian
275
23k
Side Projects
sachag
452
42k
The Art of Programming - Codeland 2020
erikaheidi
51
13k
A Modern Web Designer's Workflow
chriscoyier
692
190k
The Language of Interfaces
destraynor
154
24k
GraphQLとの向き合い方2022年版
quramy
43
13k
For a Future-Friendly Web
brad_frost
174
9.4k
Why Our Code Smells
bkeepers
PRO
334
57k
A Philosophy of Restraint
colly
203
16k
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ͷͲΜͳ͜ͱ͕͖Ͱ͔͢?
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ