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 • Go͸1.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࣌ؒલʹࢥ͍ͭ ͍ͨͷͰɺͦͷ͏࣮ͪ૷͠ͱ ͜(͜Ε͕Φν)