Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
࠷ͷΫΤϦϏϧμΛ ໝͯ͠Έͨ @mackee_w a.k.a Ϛίϐʔ ΠΧID: mackee_w
Slide 2
Slide 2 text
YAPCԠื͍ͯ͠·͢ • http://yapcasia.org/2015/talk/show/ a668ef3e-080b-11e5-b2b4-79c97d574c3a • Ͳ͏ͯ͠PerlͰυϩʔϯΛඈ͍ͨ͠ਓͷͨ ΊͷϋʔυΣΞϋοΫ֓ • ·ͨͷ໊Λୁั͞Εͳ͍ͨΊʹυϩʔϯΛඈ ͨ͢Ίͷ97ͷ͜ͱ
Slide 3
Slide 3 text
GoͷΫΤϦϏϧμ • lann/squirrel import sq “github.com/lann/squirrel” query, args, err := sq.Select(“id”, “name”).From(“user”).Where(sq.Eq{“id”: id}).ToSql() row := db.QueryRow(query, args…)
Slide 4
Slide 4 text
sq.Where(sq.Eq{“id”: id}) ↑͍ͭ͜ϦϑϨΫγϣϯ
Slide 5
Slide 5 text
ͦsquirrelΫΤϦϏϧμ • ΫΤϦϏϧμͳͷͰεΩʔϚΛΒͳ͍ • εΩʔϚΛΒͳ͍ͷͰΧϥϜͷܕΛΒͳ ͍ • ͱ͍͏͔interface{}ͳͷͰͳΜͰಥͬࠐΊΔ • errorͱ͔ಥͬࠐΊΔɺͦͯ͠panicΔ
Slide 6
Slide 6 text
ϦϑϨΫγϣϯͷޭࡑ • ϦϑϨΫγϣϯʹΑΓͱΓ͋͑ͣinterface{}Ͱ ड͚ͯͦͷޙͷ͜ͱޙͰߟ͑ΔΈ͍ͨͳ͜ ͱ͕ग़དྷΔ • ͦͷΘΓʹಈ͍͍ͯΔͱ͖ʹpanicΔͷͰਓ ͕͕ؒΜͬͯpanicΒͳ͍Α͏ʹಥͬࠐΉ ͷΛࢹ͠ͳ͚ΕͳΒͳ͍
Slide 7
Slide 7 text
ܕͱԿͩͬͨͷ͔ (GoܕϏονݴޠͱ͍͏ ͜͜Ͱແࢹ͓ͯ͘͠)
Slide 8
Slide 8 text
sqlla - a pre- generated structure query buillder - ͔࣍ΒໝͰ͢
Slide 9
Slide 9 text
go generate • Go1.4͔Βgo generateͱ͍͏Έ͕Ճ ͞Εͨ • //go:generate hogehoge • ͜ΕΛهड़ͨ͠ιʔε͕ଘࡏ͢Δͱ͜ΖͰgo generateͬͯίϚϯυΛଧͭͱhogehogeͬͯ ͍͏ͷ͕γΣϧͰ࣮ߦ͞ΕΔ
Slide 10
Slide 10 text
༻ྫ • https://godoc.org/golang.org/x/tools/cmd/ stringer จࣈྻԽग़དྷΔఆΛ࡞ΔͨΊͷ generater • ఆͷ্ʹίϝϯτͰΞϊςʔγϣϯΛ࡞Δ ͱ fmt.Stringerͱ͍͏interfaceΛ࣮ͨ͠type Λఆٛͯ͠จࣈྻԽग़དྷͯศར
Slide 11
Slide 11 text
argen • ੩తղੳϕʔεͷORM • //+ARͬͯstructʹॻ͘ͱ͍Ζ͍Ζ࣮ͯ͘͠ ΕΔ(?)
Slide 12
Slide 12 text
genddl • ࡞ͷDDLੜث • //+table: <ςʔϒϧ໊>ͬͯstructʹॻ͍ͯΧ ϥϜ໊ͱ͔ΛλάͰॻ͘ͱDDLΛੜͯ͘͠ ΕΔ
Slide 13
Slide 13 text
ಓ۩ • go/parser + go/ast • text/template
Slide 14
Slide 14 text
ࠓճໝͨ͠ͷ • ੩తղੳϕʔεͷΫΤϦϏϧμ import ( “github.com/mackee/sugoiapp/schema/user” ) user.UserId{1}.Name{“name”}.ToSql()
Slide 15
Slide 15 text
த //+table: user type User struct { Id uint64 `db:”id”` Name string `db:”name”` }
Slide 16
Slide 16 text
͔͜͜Βauto generated type Name struct { Name string Expr sqlla.Expr } func (c Name) ToSql() { return “name “ + c.Expr.ToSql() + “?” }
Slide 17
Slide 17 text
͋ͱϝιουνΣΠϯͱ͔ ͕ΜͬͯࣗಈੜϫΠϫ Π ྗٕ͡Ό
Slide 18
Slide 18 text
ͱ͍͏ͷΛ1࣌ؒલʹࢥ͍ͭ ͍ͨͷͰɺͦͷ͏࣮ͪ͠ͱ ͜(͜Ε͕Φν)