Slide 1

Slide 1 text

go#generate#)ps GolangTipsʢGunosy.go#13ʣ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 1

Slide 2

Slide 2 text

ࣗݾ঺հ • 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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

σϞ / /go:generate*megajson*./sample/sample.go @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 4

Slide 5

Slide 5 text

ศརͳ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

Slide 6

Slide 6 text

go#generateπʔϧΛ࡞Δͱ͖ ศརͩͬͨ΋ͷΛ঺հ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 6

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

ͪΐͬͱมΘͬͨ࢖͍ํ ΋͔͢͠Δͱόοτϊ΢ϋ΢͔΋Ͱ͕͢ɻɻɻ!! @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 10

Slide 11

Slide 11 text

࣮૷Λॻ͖׵͑Δ kyokomi/gomaͰ΋࢖ͬͯΔख๏Ͱ͢ɻ go:generateͰϑΝΠϧΛ·Δ͝ͱ্ॻ͖ͯ͠ɺ࣮૷Λॻ͖׵͑ Δɻ interfaceΛ߹ΘͤΕ͹OKɻ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 11

Slide 12

Slide 12 text

͜Ε͕ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 12

Slide 13

Slide 13 text

͜͏ͳΔ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 13

Slide 14

Slide 14 text

࣮૷Λॻ͖׵͑Δ ͜ͷྫͷ৔߹ɺ΋ͱ΋ͱ͋ͬͨ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

Slide 15

Slide 15 text

άϩʔόϧม਺ͷ஋Λมߋ͢Δ ͜Ε΋ઌ΄Ͳͱಉ͘͡kyokomi/gomaͰ࢖ͬͯΔख๏Ͱ͢ɻ go:generateͰผϑΝΠϧͰఆ͍ٛͯ͠Δάϩʔόϧม਺ͷ஋ ʢॳظ஋ͳͲʣΛมߋ͢Δɻ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 15

Slide 16

Slide 16 text

ϑϥάॳظԽͯ͠ΔՕॴʢ্ॻ͖͞ΕΔʣ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 16

Slide 17

Slide 17 text

ϑϥάΛࢀর͍ͯ͠ΔՕॴ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 17

Slide 18

Slide 18 text

άϩʔόϧม਺ͷ஋Λมߋ͢Δ ͜ΕͰɺઌ΄ͲͷAssetͷݺͼ෼͚Λϑϥά؅ཧͯ͠ɺͲͬͪ΋࢖ ͑ΔΑ͏ʹͳΓ·͢ɻ ·ͨɺgo'bindataͰgenerateͯ͠ͳ͍࣌͸sqlFileϑϥά͕trueͱͳ ͍ͬͯͯɺAssetFileͷํΛݺͼग़͢͜ͱʹͳΓ·͢ɻ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 18

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

ͨͱ͑͹kyokomi/gomaͩͱ͜Μͳײ͡ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 20

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

͓ΘΓ @k_yokomi,)2015/06/02)ʮGolangTipsʢGunosy.go#13ʣ)go)generate)?psʯ 22