ίυδЀύ
• Ͳ Go ͡
• Perl Monger ͢ Golang ΨতΗΞ͜ͼ䦒Ϝϫ͵;ͩΣ
• Go ΄承՛䯭ͽΌ Perl ;΄ፘ晅ᅩ
• Go ͽ๋ṛ΄ Web API Ψ֢ͼΕΞ͜Ѻ
• Go ͽ͚͚ے仂ϓφϕΨ䨗ͥʹѺ
• ͚͚ఽͮϠϸϖͭͼϷϷЄφͯΡʹѺ
• Δ;Η
$GOPATH ͡ΟᭈΟ͚ (3)
• Go 1.12 ͽفΡ go mod ͽ $GOPATH Ψ䶲ͭͥͼΘΞͥΡΟ͚ͭ…͢
• ͚ΔΔͽل樄ͫͼͣ͵͘ΟΜΡϯυϲЄϸ͢ semver 䌏䖕ͯΡᥝ͘͢Ρ
• go mod ͽΘϯυϲЄϸ΄κϰϐτϲͿ΅ $GOPATH ᯈӥ֢ΟΡ΄ͽ
ਠق䶲ͭͥͼΞͥΡΥͧͽ΅ͫͳ͜
• ͳΘͳΘ $GOPATH ΄ᯈӥͽͰ;Κͼͣ͵͡Ο嬹䙼Ψ䄜͞Ρ΄΅䦒樌͢
͡͡Πͳ͜
• Go 1.12 ΅ 2019.2 ϷϷЄφԨਧѺҁΘͯͦ͜ͽͯѺѺ҂
Slide 30
Slide 30 text
϶αϣ϶Ϸ΄ᓕቘොဩ͢ΖͰ͚ (1)
• ϶αϣ϶Ϸ΄αЀφϕЄϸ΅ go get πϫЀϖΨֵ͜
• go get -u github.com/motemen/gore ΄Ξ͜୵ୗͽׁਂ樛㭚ΘތΗͼαЀφ
ϕЄϸͭͼͥΡ
• $GOPATH/src ΘΣΘΣ git clone ͫͼϠϸϖ͢ᩳΡ
• Քࢧ΄ξЄφͶ; $GOPATH/src/github.com/motemen/gore Ϳ
• πϫЀϖ϶αЀϑЄϸΘ $GOPATH/bin ϠϸϖͭͼαЀφϕЄϸͭͼͥΡ
• perl ͽ cpanm install Foo::Bar ͯΡ΄;Ͷ͚͵͚Ӟ姼
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
϶αϣ϶Ϸ΄ᓕቘොဩ͢ΖͰ͚ (2)
• go get ͽαЀφϕЄϸͫΡ΄΅ git repository ΄ master ΄
HEADѺ
• 䋚檭΅ go1 ;͚͜ branch or tag ͘͢ΆͳΨ憎ΡͧͿΑ
Βၺ᭐ͭͼ͚͚ཛྷ䯭
• master ͢ stable ͡Ϳ͜͡΅Υ͡ΟΩ΄ͽ͡͡㷗͚ͭΘ΄
͘͢Ρ
Slide 33
Slide 33 text
϶αϣ϶Ϸ΄ᓕቘොဩ͢ΖͰ͚ (3)
• go get ͽ΅ version ΨਧͭͼݐͯΡͩ;͢ͽ͚ͣ
• ͳΘͳΘ version ᓕቘͫͼ͚ΡϯυϲЄϸ͚͢ѺѺ
• Go 1.12 ͽفΡ go mod ΞΠ semver Ψֵ͜Ξ͜Ρ΄
ͽϮЀϓͫͼ͚Ρ϶αϣ϶Ϸ΅ၺ᭐ͭͼ͚ͼ΅͚Ρ
Slide 34
Slide 34 text
;΅͚͞
Slide 35
Slide 35 text
WebίϤϷξЄτϴЀͿΨ䨗ͥ䁰ݳ΅
go get Ψፗളֵͩ͜;΅चጱ΅͚
Slide 36
Slide 36 text
WebίϤϷξЄτϴЀΨ䨗ͥ;ͣ΄϶αϣ
϶Ϸ΄ᓕቘ (1)
• Carton Κ bundler ΄Ξ̵͜ϤϺυδμϕᯈӥᥝϯυϲЄ
ϸΨϝЄυϴЀࢴਧͭͼαЀφϕЄϸͯΡ՛奲ΕΨֵͩ͜;͢Α
;ΩͿ
• go get Ψֵ͜΄΅ᇙਧ΄ϯυϲЄϸ΄䞉㵕Ψ抠Ώ͵͚;̵͡π
ϫЀϖֵ͚͵͚;͡ͼ䁰ݳ͢Α;ΩͿ
• ͭͭ͡ vendoring / glide / dep / vgo / go mod ;͚Σ͚Σ͘ͼ
奾ੴͿֵ͞Ά͚͚΄Ҙ;Ρ
Slide 37
Slide 37 text
WebίϤϷξЄτϴЀΨ䨗ͥ;ͣ΄϶αϣ
϶Ϸ΄ᓕቘ (2)
• ୮ᶎ΅ glide / dep / go mod Ψֵ͚ړͧͼ͚ͥᥝ͘͢Ρ;ΥΡ
• glide / dep ΅ֵΥͼ͚ΡϤϺυδμϕ͢ग̵़ͥΑΒΑΒ๗இ᭗Π㵕
ͥ΄ͽ㪥Π䟵͞ΡϯώϦЄτϴЀ֗͢ͳ͜
• vgo ΅ go mod ;ͭͼ Go ݐΠ旿Δ͵΄ͽͼᜉ͚
• Go 1.12 ͡Ο΅ go mod Ψֵͼ͚ͥͩ;Ρ΅Ͱ
• 匍ࣁ΄ Go 1.11 ͽ΅ $GO111MODULE =on ͭͼͥ͠;͠手ͭͽͣΡ
Slide 38
Slide 38 text
;͚͜Υͧͽ
ΔͶΔͶͩͼ͚᮱ړ͘͢Ρఽͮ
Slide 39
Slide 39 text
ηЄςϷЀνϑЄϸ͚͢ (1)
• Go ΅ηЄςϷЀνϑЄϸ΄䷥ਧᇇ΄Ξ͜Θ΄͚͢
• ΔͫΟय़ࣈ͡ΟতΗΡͩ;Ρ
• go xxx πϫЀϖΨ;ͥ͡ͺ͡ Makefile Ψ;ͥ͡䨗ͥͩ;Ρ
• Ϡϸϖ͢ͳͩΔͽ櫞͚ͭͥ΄ͽ̵ͳΩࢯΟ͚;͚͞ΆࢯΟ͚͢…
• ϷϷЄφ䦒 tag ͵Π̵Ϡϸϖͭ͵ϝαϗϷ version ईΗ旿ΩͶΠͿਧࣳ
΄㳌ቘ΅ generate ͭ͵͚ཿ
• ;ͥ go mod ΞΠ϶αϣ϶Ϸ΄ϝЄυϴЀᓕቘ͢᯿ᥝͼ͚ͥ
Slide 40
Slide 40 text
ηЄςϷЀνϑЄϸ͚͢ (2)
• ౯̸΅ Minilla Κ ExtUtils::MakeMakerҁݘ͚҂ 䙼ͯͤͼ
ͭΔ͵ΩΚ…
• go mod Θֵ͞ΡΞ͜Ρ̵ͭΒͷΒͷͩ΄旽΄ϑЄϸΘڊ
ͼͣͼΘ͚͚殹䶲΅ͯΡ
Slide 41
Slide 41 text
ഄΠᬬͼΕΡ;ΘΣΘΣ϶αϣ϶Ϸ΄䜷
͚;͡ͽϜϫͼ͚͵
Slide 42
Slide 42 text
ͭ͡ΘՔΘ䄜Υͼ͚ͥ΄ͽ͘͵
Slide 43
Slide 43 text
΅͚
Slide 44
Slide 44 text
ίυδЀύ
• Ͳ Go ͡
• Perl Monger ͢ Golang ΨতΗΞ͜ͼ䦒Ϝϫ͵;ͩΣ
• Go ΄承՛䯭ͽΌ Perl ;΄ፘ晅ᅩ
• Web API Ψ֢ͼΕΞ͜
• ϓφϕΨ䨗ͥ
• Docker Ϡϸϖͭͼ㵕ͯ͡
• Δ;Η
code formatter ͺ͚ͼ (3)
• go fmt ΨΘ;ͭ͵ go import Κ go returns Ϳ΄ϑЄϸΘ
͘Ρ
• चጱ΅πЄϖ᮱ړ΄ෆ୵΅Ӟ姼ͽ̵import ΄ෆ୵ϸЄϸ
͢ͷΝ;晅͵Π return Ψ愆ਠͭͼͥ͵ΠͯΡ
• य़ͣͥ䄜ΥΟ͚΄ͽϤϺυδμϕ㶨֖ͽֵ͜Θ΄Ψࢴਧͯ
Ά㺔氂ͭ
Slide 87
Slide 87 text
linter ͺ͚ͼ
• go ΅ᶉጱᥴຉ͢ go ᛔ֛ͽΚΠΚ͚ͯ͵Η̵linter Θ꧌䋚ͭͼ͚Δͯ
• 䰤伛πϫЀϖ;ͭͼ͘Ρ go vet ΚςЄϖϞЄϓΰ΄ go lint ΅๋֗ᴴֵ͜;͚͚ͽ
ͭΝ͜
• go vet ΅πЀϞαϸε϶Є΅Ο͚ͧͿϮϯϷϷЄμͿͫΔͬΔ㺔氂
Πͳ͜πЄϖΨර͞ͼͥΔͯ
• go lint ΅ΞΠΞ͚πЄϔΰЀνφόαϸΨ suggest ͭͼͥΔͯ
• ͫΟͣΗ奞͡ώδϐμΨᤈ͚͵͚䁰ݳ΅ https://github.com/dominikh/go-tools
Ψ手ͯͩ;ΘͽͣΔͯ
Web API Ψ䨗͚ͼ͚ͥ (1)
• RESTful Γ͚ JSON Ψᬬͯ API Ψ䨗͚ͼ͚ͥ
• TwitterΓ͚ͷΝ;ͭ͵ϮϐψЄυΨಭᑤͽͣΡ API Ψ戔懯ͭΔͯ
• POST /users
• GET /users/{user_id}
• POST /messages
• GET /messages/{message_id}
• Ε͵͚ఽͮ
ϓφϕΨ䨗ͥ (2)
• ϓφϕ΄䋚ᤈ΄՛ො
• go test ͽ䋚ᤈͽͣΡ
• go test ./… ͽٚ䒐ጱϓφϕͭͼͥΡ
• Perl ΄ prove ΄Ξ͜Θ΄
Slide 142
Slide 142 text
Service ΄ϓφϕΨᘍ͞Ρ (1)
• ΔͰ Service ΄ϓφϕΨ䨗ͥͩ;Ψᘍ͞Δͯ
• Repository ΅ interface Ψ伋͵ͭͼ͚Ά͚͚΄ͽ̵ϓφϕӾ
ͽ Struct Ψਧ嬝ͭͼͨ͘Ά૧๊ͭ͞Ρͩ;͢ͽ̵ͣService
ͶͧᵞӾͯΡͩ;͢ͽͣΔͯ
Slide 143
Slide 143 text
Service ΄ϓφϕΨᘍ͞Ρ (2)
• ducktyping ͶͧͶ; Service ΄ӾͽͷΙΩ;๗இͭ͵ Repository ΄Ϯ
ϊϐϖ͢Άͼ͚Ρ͡Υ͡Ο͚͡ΘͭΔͱΩ
• gomock Ψֵ͜;̵樛හ΄Ήڊͭ΄殼ଧΚΉڊͭࢧහͿΨϓφϕ
ͯΡͩ;͢ͽͣΔͯ
• gomock ΅ mockgen ;͚͜πϫЀϖͿψϐϕͽڥአͭΔͯ
• mockgen ϯϐμͭ͵͚ go ϢήαϸΨჁͯ; interface Ψ伋͵ͭ͵
go ϢήαϸΨ generate ͭͼͥΔͯ
Slide 144
Slide 144 text
MySQL Ψֵ͵ϓφϕ (1)
• github.com/lestrrat-go/test-mysqld Ψͺ͜͡
• ΕΩय़অͣ Test::mysqld ΄ go ϪЄϓΰЀν ͽͯ
• test ΄͵ΉਠقμϷЄЀ MySQL ΨᒈͷӤͨͼͥΡΚ
ͺ
• ΘͷΣΩ MySQL ΄ᒈͷӤͨ䦒樌͢͡͡Ρ΄΅ͧΟ͚
Slide 145
Slide 145 text
MySQL Ψֵ͵ϓφϕ (2)
• ϓφϕΨṛ᭛ࢧͭ͵͚䁰ݳ΅Ԫڹ愢හ΄ MySQL Ψ Docker Π
MySQL::Sandbox ΠͽᒈͷӤͨͼ͚͠ͼࢧͯ΄͢ፘ䄜ΥΟͰ͚͚䶲ͭ͢Δ
ͯ
• Perl Ͷ;ව̸ͩ΄͘͵Π΅ΚΠੱͥͫͼ͚ͼᛔړΘค Test::mysqld Ψ
姆۸ͯΡොဩΚApp::Prove::Plugin::MySQLParallel Ψ䨗͚͵ΠͭͼΔͭ͵
• Test::mysqld::pool ;͡ App::Prove::Plugin::MySQLPool ;͚͡Σ͚Σ͘Ρ
• Go ͽ͚͚ఽͮΚΡොဩ΅Θ͜ͷΝ͚ᎸᑪͭΔͯ