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 generate tips
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
kyokomi
June 02, 2015
Technology
3.5k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
go generate tips
Gunosy.go#13 GolangTipsの発表内容です。
go generateについて
kyokomi
June 02, 2015
More Decks by kyokomi
See All by kyokomi
goaを導入した話
kyokomi
0
2.6k
さくっとGAE/GoでAPIを作って本番環境にリリースする / gaego-api-init-release
kyokomi
0
4.1k
Go言語で作られたAPIのレガシーコードと戦った話 / Go Conference 2015 winter
kyokomi
4
4k
Go製の拡張可能なSlack bot
kyokomi
3
8.5k
私がGo言語を選んだ理由
kyokomi
3
420
Gomaについて
kyokomi
4
3.2k
Gunosy APIチームGo開発フロー
kyokomi
7
6.3k
Other Decks in Technology
See All in Technology
穢れた技術選定について
watany
17
5.4k
アップデートで何が変わった?デモで学んで使いこなすIBM Bob2.0
muehara
0
110
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
210
Claude Code公式skillで 自分の仕事を少しずつ手放そう!(Claude Code開発ノウハウ大公開スペシャル by クラスメソッド)
kaym
1
480
Amplify Gen2でbackend.tsにCDKを定義する/しない事によるCDKの挙動の違いとユースケース
smt7174
1
390
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
13
6.4k
End-to-Endで考える信頼性 —LINEアプリにおけるクライアント開発×SRE連携の実践
maruloop
4
4.5k
Gen3R: 3D Scene Generation Meets Feed-Forward Reconstruction
spatial_ai_network
0
130
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
3
1.1k
誤解だらけの開発生産性 / Myths and Misconceptions about Developer Productivity
i35_267
2
780
Network Firewallやっていき!
news_it_enj
0
170
AmplifyHostingConstructからSSRフレームワークのためのホスティング設計を考察する/amplify-hosting-construct
fossamagna
1
210
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
320
The Cult of Friendly URLs
andyhume
79
6.9k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Facilitating Awesome Meetings
lara
57
7k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
410
A Tale of Four Properties
chriscoyier
163
24k
Thoughts on Productivity
jonyablonski
76
5.2k
Designing Powerful Visuals for Engaging Learning
tmiket
1
450
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Leo the Paperboy
mayatellez
8
1.9k
The agentic SEO stack - context over prompts
schlessera
0
850
Transcript
go#generate#)ps GolangTipsʢGunosy.go#13ʣ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 1
ࣗݾհ • Twi%er:)@k_yokomi)ʢ͖ΐ͜Έʣ※1 • GunosyͰGoΤϯδχΞͬͯ·͢ • Cocos2d9xͰήʔϜ࡞ͬͨΓ • Gunosy.goͷओ࠵ͱ͔ͬͯ·͢ •
GoConͰLT͠·͢)! ※1"ΞΠίϯ݄ඣͷᘡᘚ͞ΜͰ͢ɻ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 2
go#generateͱ • Go$1.4͔Β͑·͢ • ༻్ͱͯ͠ɺgo$buildͷલʹ໌ࣔతʹ࣮ߦ͢Δͷ • go generateͱ͍͏ίϚϯυͰ࣮ߦͰ͖ɺGoͷιʔείʔυ ͷ/ /go:generate$ʙΛಡΈऔ࣮ͬͯߦ͞ΕΔ
$5$ϑΝΠϧ໊͕os.Getenv("GOFILE")ͰऔΕΔ $5$ύοέʔδ໊͕os.Getenv("GOPACKAGE")ͰऔΕΔ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 3
σϞ / /go:generate*megajson*./sample/sample.go @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 4
ศརͳgo#generateπʔϧ • x/tools/cmd/stringer0:0enumͬΆ͍ͷੜ • 3nylib/msgp0:0msgpackͷEncoder/DecoderΛੜ • benbjohnson/megajson0:0jsonͷEncoder/DecoderΛੜ • jteeuwen/go>bindata0:0templateͳͲͷϑΝΠϧΛbinaryΛੜ •
benbjohnson/ego0:0erbܗࣜͰॻ͚ΔtemplateͰego.goΛੜ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 5
go#generateπʔϧΛ࡞Δͱ͖ ศརͩͬͨͷΛհ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 6
go/formatύοέʔδ goͷιʔείʔυΛgenerate͢Δ߹ɺඞͣgofmt͔͚͓ͯ͘ͱ ͏ਓʹ༏͍͠*⭐ import "go/format" bts, err := format.Source(data) if
err != nil { return fmt.Errorf("go format error: %s \n%s", err, string(data)) } ߏจΤϥʔݕग़Ͱ͖Δ!❗!❗ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 7
go#lintͬΆ͍replace kyokomi/lintname,΄΅શ෦ɺgolang/lintͷίϐϖͰ͕͢ɻɻɻ package main import ( "fmt" lint "github.com/kyokomi/lintname" )
func main() { fmt.Println(lint.LintName("HogeId")) // => HogeID } @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 8
serenize/snaker CamelCase'<=>'SnakeCaseΛม͢ΔϥΠϒϥϦɻ package main import ( "fmt" "github.com/serenize/snaker" ) func
main() { fmt.Println("HogeId => ", snaker.CamelToSnake("HogeId")) // HogeId => hoge_id fmt.Println("hoge_id => ", snaker.SnakeToCamel("hoge_id")) // hoge_id => HogeID } @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 9
ͪΐͬͱมΘ͍ͬͨํ ͔͢͠Δͱόοτϊϋ͔Ͱ͕͢ɻɻɻ!! @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 10
࣮Λॻ͖͑Δ kyokomi/gomaͰͬͯΔख๏Ͱ͢ɻ go:generateͰϑΝΠϧΛ·Δ͝ͱ্ॻ͖ͯ͠ɺ࣮Λॻ͖͑ Δɻ interfaceΛ߹ΘͤΕOKɻ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 11
͜Ε͕ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 12
͜͏ͳΔ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 13
࣮Λॻ͖͑Δ ͜ͷྫͷ߹ɺͱͱ͋ͬͨasset_gen.go͕go*bindataͰ generateͨ͠asset_gen.goͰ্ॻ͖͞Ε·͢ɻ ͜ΕͰfileΛݺͿͷͱbinaryʹͨ͠AssetΛݺͼ͚Δ͜ͱ͕Ͱ ͖·͢ɻ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 14
άϩʔόϧมͷΛมߋ͢Δ ͜Εઌ΄Ͳͱಉ͘͡kyokomi/gomaͰͬͯΔख๏Ͱ͢ɻ go:generateͰผϑΝΠϧͰఆ͍ٛͯ͠Δάϩʔόϧมͷ ʢॳظͳͲʣΛมߋ͢Δɻ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 15
ϑϥάॳظԽͯ͠ΔՕॴʢ্ॻ͖͞ΕΔʣ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 16
ϑϥάΛࢀর͍ͯ͠ΔՕॴ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 17
άϩʔόϧมͷΛมߋ͢Δ ͜ΕͰɺઌ΄ͲͷAssetͷݺͼ͚Λϑϥάཧͯ͠ɺͲͬͪ ͑ΔΑ͏ʹͳΓ·͢ɻ ·ͨɺgo'bindataͰgenerateͯ͠ͳ͍࣌sqlFileϑϥά͕trueͱͳ ͍ͬͯͯɺAssetFileͷํΛݺͼग़͢͜ͱʹͳΓ·͢ɻ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 18
go#generate#ͰPATHࢦఆͰ͖·͢ ҎԼͷΑ͏ʹPATHࢦఆͯ͠ɺ࣮ߦՄೳɻ $ go generate github.com/kyokomi/goma/gen/goma @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 19
ͨͱ͑kyokomi/gomaͩͱ͜Μͳײ͡ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 20
go#generate͞ΕΔॱ൪ ී௨ʹ্͔Βॱ൪ʹ࣮ߦ͞Ε·͢ɻ ͦͷͨΊɺલड़ͨ͠ʮ࣮Λॻ͖͑ΔʯͷΑ͏ʹ 1ͭͷgo:generate࣮ߦ݁ՌΛ2ͭͷgo:generate࣮ߦ݁Ռ ͰҰ෦͘͠શ෦ॻ͖͑Δ͜ͱ͕Ͱ͖·͢ɻ //go:generate goma gen --driver mysql
--db hoge_db //go:generate migu sync --driver mysql --db hoge_db @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 21
͓ΘΓ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 22