Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Goで作るWebアプリケーション Echo 編 といいつつGoの説明多い
Search
Takashi Funato
August 07, 2019
Programming
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goで作るWebアプリケーション Echo 編 といいつつGoの説明多い
Takashi Funato
August 07, 2019
More Decks by Takashi Funato
See All by Takashi Funato
AWS をちょっとわかった気になる / Kinda feel the AWS
tfunato
0
110
人に優しいAWS運用
tfunato
0
93
OSI reference model Layer I
tfunato
0
68
Scalaで実装した 分散処理システムの超概要
tfunato
0
210
Docker勉強会
tfunato
1
170
GISとして活用するElasticsearch
tfunato
6
8k
Other Decks in Programming
See All in Programming
[2026-10-09]一枚の布で作らなくてもいい。 信頼性は「パッチワーク」で紡がれる~既存の運用と新しい可能性をつなぎ合わせてきたCREの話~
tosite
0
110
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
AWSに止められる覚悟してますか?
morizo_1984
2
540
phperだってパンチカードでコーディングしたい
o0h
PRO
0
360
R8 の設定見直しでアプリサイズ削減
andpad
0
220
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
0
140
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
33k
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
220
dotNET_vulnclicker_intro.pdf
deka_morita
0
150
Domain-Driven Transformation
hschwentner
2
2.3k
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
270
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
120
Featured
See All Featured
WENDY [Excerpt]
tessaabrams
14
40k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
630
Google's AI Overviews - The New Search
badams
0
1.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
Writing Fast Ruby
sferik
630
63k
Color Theory Basics | Prateek | Gurzu
gurzu
1
490
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
ラッコキーワード サービス紹介資料
rakko
1
5.4M
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Transcript
GoͰ࡞ΔWebΞϓϦέʔγϣϯ Echo ฤ ͱ͍͍ͭͭGoͷઆ໌ଟ͍ Sangenjaya Yumemi, Aug 07 2019 Takashi
Funato YUMEMI Inc. @tfunato by Renée French
{ Simplicity. ࣗݾհ • ᢠށɹོ(tfunato) • αʔόαΠυҰے • PHPɺNode.jsɺJavaɺetc •
AWS ೝఆσϕϩούʔ ΞιγΤΠτ • ༗ޮظݶΕͨ • ͳΜͰͬͯΔ • ୭͔কعΛࢦͦ͏ • ࡉ͔͍༰ϓϩϑΟʔϧΈͯͪΐ 2
Agenda ɾGoͷઆ໌ ɾGoͱWeb ɾWebΞϓϦέʔγϣϯϑϨʔϜϫʔΫ ɾEchoͷհ ɾ·ͱΊ
Goͷઆ໌
Goͷઆ໌ - ಛ - • ੩తܕ͚ • ༷ʑͳܕ • ߏମͱϙΠϯλ
• ΦϒδΣΫτࢦͰͳ͍ • ݴޠ͕࣋ͬͯΔϥΠϒϥϦ • ίϯύΠϧ • ಈ࡞ڥ • ϝϞϦཧ 5
Goͷઆ໌ - ੩తܕ͚ - • ؔͷҾɺฦΓ͕༧Ίܕ͕ܾ·͍ͬͯΔ • ίϯύΠϧ࣌ʹݫີʹܕνΣοΫ͞ΕΔ • Duck
Typing࣮ߦ࣌νΣοΫ • ͱ͍͑ • interface{}ܕͱ͍͏ͷ͋Δ 6
Goͷઆ໌ - ༷ʑͳܕ - جຊܕ ओͳͷ 7 ໊લ આ໌ ॳظ
ܕ JOU ࣮ܕʹґଘͨ͠ܕ JOU ූ߸͖ɺఴࣈCJU JOU JOU JOU จࣈྻ TUSJOH จࣈྻΛ֨ೲ ۭจࣈ ਅِ CPPM USVF GBMTF '"-4&
Goͷઆ໌ - ༷ʑͳܕ - ෳ߹ܕ ओͳͷ 8 ྫ આ໌ ྻܕ
<>JOU ݸͷཁૉΛ࣋ͬͨJOU εϥΠεܕ <>JOU Մมྻ ϙΠϯλܕ JOU ϝϞϦ্ͷΞυϨεΛද͢ܕ Ϛοϓܕ NBQ<TUSJOH>JOU TUSJOHΛLFZɺJOUΛWBMVFʹͭ ؔܕ GVOD JOU JOU ؔΛ֨ೲ͢Δܕ ߏମܕ UZQFTUSVDU ߏମΛ֨ೲ͢Δܕ ΠϯλʔϑΣʔεܕ JOUFSGBDF\^ جຊతʹԿͰ֨ೲͰ͖Δܕ
Goͷઆ໌ - ߏମͱϙΠϯλ - • ߏମ • ৽͘͠ܕΛ࡞Δ • ෳ߹σʔλू߹
• ϑΟʔϧυͱ͍͏ • ϙΠϯλ • ϝϞϦͷΞυϨε • ؔͷҾͰ໌ࣔ͠ͳ͍ͱɺجຊతʹ͠ 9
Goͷઆ໌ - ߏମ - 10 // ߏମܕͷએݴ type hoge struct
{ id int name string } // ߏܕͷॳظԽ ϑΟʔϧυࢦఆ var h hoge h.id = 1 h.name = “test” // ߏܕͷॳظԽ ߏମϦςϥϧ h := hoge{ id : 1, name : “test”, }
Goͷઆ໌ - ϙΠϯλ - 11 CݴޠͷϙΠϯλͱಉ͡Α͏ʹϝϞϦͷΞυϨεΛѻ͏ var a int =
100 var aPointer *int = &a // &ΞυϨεԋࢉࢠɻΞυϨεΛऔಘ͢Δ͜ͱ͕Ͱ͖Δ // * ϙΠϯλܕɻΞυϨεΛ֨ೲͰ͖Δ ͠ɺϙΠϯλ͠Λҙࣝ͢Δ ੑೳɺίʔυྔʹؔΘͬͯ͘Δ
Goͷઆ໌ - ΦϒδΣΫτࢦͰͳ͍ - 12 • ΦϒδΣΫτࢦͰͳ͍͕ɺߏମʹࣅͨΑ͏ͳৼΔ͍ Λͤ͞Δ͜ͱ͕Ͱ͖Δ type Name
struct { FirstName string LastName string } type Printer interface { print() string } func (n *Name) print() string { return n.FirstName + LastName } name := Name{FirstName: “Hoge”, LastName: “Fuga”} printName := name.print()
Goͷઆ໌ - ݴޠ͕࣋ͬͯΔϥΠϒϥϦ - • GoࣗମͷϥΠϒϥϦ͕๛ʂ • https://golang.org/pkg/ • https://godoc.org/-/subrepo
• αϒύοέʔδ 13
Goͷઆ໌ - ίϯύΠϧ - • ίϯύΠϥݴޠͰ͢ • OS ωΠςΟϒόΠφϦͰಈ͖·͢ •
ґଘ͢ΔϥΠϒϥϦͳ͠ • ֤OSຖʹίϯύΠϧ • ಈ࡞ڥɿPOSIXʢLinuxɺMacOS)ɺWindows • CݴޠͷLinkerͱ͔͍Βͳ͍ • go build • ϏϧυͰMakefileΛΑ͘͏ 14
Goͷઆ໌ - ϝϞϦཧ - • ϝϞϦཧGCʹجຊ͓·͔ͤ • ͱ͍͑ɺ࡞Γ͕ѱ͚ΓΌϦʔΫ͢Δ • Α͠ͳʹͬͯ͘ΕΔ
• ௨ৗɺϝϞϦͷΞϩέʔγϣϯίετ͕ߴ͍ • ͦΕͰGo݁ߏૣ͘ಈ͘ 15
GoͱWeb
GoͱWeb • ͱͱݴޠࣗମͷϥΠϒϥϦ͕खް͍ // HTTPαʔό (main.go) package main import
( "io" "log" "net/http" ) func main() { helloHandler := func(w http.ResponseWriter, req *http.Request) { io.WriteString(w, "Hello, world!\n") } http.HandleFunc("/", helloHandler) log.Println("Listening...") http.ListenAndServe(":3000", nil) // open 3000 port }
GoͱWeb • ݴޠࣗମʹWebαʔόͷػೳ͕͋ΔͷͰɺ֤छϑϨʔ ϜϫʔΫɺMVCͷجຊػೳʹूதͰ͖Δ
WebΞϓϦέʔγϣϯ ϑϨʔϜϫʔΫ
• ΊͬͪΌͨ͘͞Μ͋Δ • gin • beego • iris • echo
• ͦͷଞɺRESTʹಛԽͨ͠ͷRoutingʹಛԽͨ͠ͷ WebΞϓϦέʔγϣϯϑϨʔϜϫʔΫ
WebΞϓϦέʔγϣϯϑϨʔϜϫʔΫ • ϑϨʔϜϫʔΫͰ࣮͞ΕΔͷେ͖͚ͯ͘ɺجຊత ʹԼهͷ̏ͭ • Routing • Request Mapping •
Response Mapping • MiddleWareʢLaravelͰ͍͏MiddleWareʣ • ͦͷଞ • LoggingͳͲ
Echoͷհ
ɾEchoΛબΜͩΘ͚ ɾEchoͷհʢRESTΆ͍ͭʣ ɾσϞ
EchoΛબΜͩΘ͚ • Node.JSͷExpressʹࣅ͍ͯΔ • ͲΕࣅͨΑ͏ͳײ͕͢͡Δ • GithubͷStarΈΜͳɺ1ສ͑ͯΔ • υΩϡϝϯτͷྔɺ࣭Ͳ͏͔ʁ •
GoogleͰώοτ͢͠͞ • αΠτͷใྔ • ։ൃऀͷ׆ൃ͞ • CommitɺϦϦʔεɺPRͷফԽͳͲ 24
Echoͷઆ໌ • Echo ͍ʂͱ͋Δ • Ginͱൺ͍ͯΒ͍͠ • ͞ਖ਼ٛ • Data
binding͕JSONɼXMLɼFormͳͲͪΌΜͱ͋Δ • RoutingΛGroupingͰ͖Δ • HTTPͷΤϥʔϋϯυϦϯά͍͢͠ • https://echo.labstack.com/ • 25
Echoͷհ - Routing - • جຊతͳRouting • /hello • /users/:id
• /users/* • Grouping • adminGroup := e.Group(“/admin”) • adminGroupʹઃఆͨ͠ͷɺͦͷύεҎ߱Ͱ༗ޮʹͳΔ • “/admin/*” ͷύεͰBasic ೝূ͍ͨ͠ͱ͔ • Method • GETɺPOSTɺPUTɺDELETE… 26
Echoͷհ - MiddleWare - • EchoࣗͰଟ͘༻ҙ͞Ε͍ͯΔ • ͪΖΜࣗ࡞Մೳ • BasicೝূɺgzipɺJWTɺCORSͳͲͳͲ
• GroupϨϕϧͰɺRoutingϨϕϧͰ • Group • admin := e.Group("/admin", middleware.BasicAuth()) • Route • e.GET("/", <Handler>, <Middleware…>) 27
Echoͷհ - RequestͱResponse - • RequestߏମͰఆٛͨ͠ͷʹBind͢Δ • ߏମͷλάͰ੍ޚ͢Δ 28 //
RequestΛड͚औΔߏମܕͷએݴ type UserRequest struct { ID int `json:”id"` Name string `json:”name”` } ߏମͷλά KTPOCPEZ \ lJEz lOBNFzlUFTUz ^ Λड͚Δઃఆ
Echoͷհ - RequestͱResponse - • JSONΛฦ͢ͷͰ͋ΕɺResponseߏମͰఆٛ • ߏମͷλάͰ੍ޚ͢Δ 29 //
ResponseΛఆٛͨ͠ߏମܕͷએݴ type UserResponse struct { ID int `json:”id"` Name string `json:”name”` } ߏମͷλά KTPOCPEZ \ lJEz lOBNFzlUFTUz ^ Λड͚Δઃఆ
σϞ • Basicೝূ͔͚ͨɺ͠ࢉ͢Δ͚ͩͷAPI • go mod init go-sample • ϓϩδΣΫτॳظԽ
• main.go ࡞ • go runʂ 30
·ͱΊ
·ͱΊ • go ࣗମͱ͖͍ͬͭ͢ • ͨͩɺϋϚΓ͍͢ϙΠϯτ͕ࢁ͋Δ • ߏମͱϙΠϯλͪΐͬͱ͍͠ • खܰʹπʔϧΛ࡞ΕΔ
• ڥߏஙͱ͔΄΅ཁΒͳ͍ • 1όΠφϦͰಈ͘ͷͰɺָͪΜ
#golang νϟϯωϧ͋ΔΑ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠