Enviar pesquisa
Carregar
Goでwebアプリを開発してみよう
•
6 gostaram
•
4,487 visualizações
Takuya Ueda
Seguir
Go言語LT大会! 「最近、Go言語始めました」の会の発表資料です。 https://connpass.com/event/28621/
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 26
Baixar agora
Baixar para ler offline
Recomendados
Go入門
Go入門
Takuya Ueda
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
ShunsukeNakamura17
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
Takuya Ueda
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Shinnosuke Tokuda
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
Recomendados
Go入門
Go入門
Takuya Ueda
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
ShunsukeNakamura17
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
Takuya Ueda
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Shinnosuke Tokuda
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
Masakazu Matsushita
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
こわくない Git
こわくない Git
Kota Saito
hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計
Shinnosuke Tokuda
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
Yutaka Kachi
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
WebRTC と Native とそれから、それから。
WebRTC と Native とそれから、それから。
tnoho
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
Goの時刻に関するテスト
Goの時刻に関するテスト
Kentaro Kawano
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeNA
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Spring CloudとZipkinを利用した分散トレーシング
Spring CloudとZipkinを利用した分散トレーシング
Rakuten Group, Inc.
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
KEISUKE KONISHI
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
Takuya Ueda
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法
Takuya Ueda
Mais conteúdo relacionado
Mais procurados
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
Masakazu Matsushita
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
こわくない Git
こわくない Git
Kota Saito
hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計
Shinnosuke Tokuda
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
Yutaka Kachi
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
WebRTC と Native とそれから、それから。
WebRTC と Native とそれから、それから。
tnoho
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
Goの時刻に関するテスト
Goの時刻に関するテスト
Kentaro Kawano
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeNA
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Spring CloudとZipkinを利用した分散トレーシング
Spring CloudとZipkinを利用した分散トレーシング
Rakuten Group, Inc.
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
KEISUKE KONISHI
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
Mais procurados
(20)
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
こわくない Git
こわくない Git
hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
Pythonによる黒魔術入門
Pythonによる黒魔術入門
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
WebRTC と Native とそれから、それから。
WebRTC と Native とそれから、それから。
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Mavenの真実とウソ
Mavenの真実とウソ
Goの時刻に関するテスト
Goの時刻に関するテスト
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Spring CloudとZipkinを利用した分散トレーシング
Spring CloudとZipkinを利用した分散トレーシング
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Semelhante a Goでwebアプリを開発してみよう
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
Takuya Ueda
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法
Takuya Ueda
GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門
Takuya Ueda
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Takuya Ueda
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
Takuya Ueda
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
Takuya Ueda
Goはじめました
Goはじめました
Masanori Masui
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろう
Takuya Ueda
Gopenflow demo v1
Gopenflow demo v1
Hiroaki Kawai
Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature Engineers
Takeshi Arabiki
Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話
Keishi Hosoba
Goだけでモバイルアプリを作る
Goだけでモバイルアプリを作る
Takuya Ueda
Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告
Tsuyoshi Yamamoto
Go初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろう
Takuya Ueda
JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜
JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜
Masakazu Muraoka
gopher-lua
gopher-lua
Takuya Ueda
Start PWA from vuejs+github pages
Start PWA from vuejs+github pages
Hirata Tomoko
今から始めるApache Groovy
今から始めるApache Groovy
Yasuharu Hayami
私なりのGo言語のご紹介
私なりのGo言語のご紹介
Ryuji Iwata
Let's make rest server by golang
Let's make rest server by golang
kazuhisa kawashima
Semelhante a Goでwebアプリを開発してみよう
(20)
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法
GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
Goはじめました
Goはじめました
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろう
Gopenflow demo v1
Gopenflow demo v1
Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature Engineers
Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話
Goだけでモバイルアプリを作る
Goだけでモバイルアプリを作る
Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告
Go初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろう
JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜
JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜
gopher-lua
gopher-lua
Start PWA from vuejs+github pages
Start PWA from vuejs+github pages
今から始めるApache Groovy
今から始めるApache Groovy
私なりのGo言語のご紹介
私なりのGo言語のご紹介
Let's make rest server by golang
Let's make rest server by golang
Mais de Takuya Ueda
Goにおけるバージョン管理の必要性 − vgoについて −
Goにおけるバージョン管理の必要性 − vgoについて −
Takuya Ueda
WebAssembly with Go
WebAssembly with Go
Takuya Ueda
GAE/Goとsyncパッケージ
GAE/Goとsyncパッケージ
Takuya Ueda
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発
Takuya Ueda
そうだ、Goを始めよう
そうだ、Goを始めよう
Takuya Ueda
マスター・オブ・goパッケージ
マスター・オブ・goパッケージ
Takuya Ueda
メルカリ カウルのマスタデータの更新
メルカリ カウルのマスタデータの更新
Takuya Ueda
Go1.8 for Google App Engine
Go1.8 for Google App Engine
Takuya Ueda
Go Friday 傑作選
Go Friday 傑作選
Takuya Ueda
GoによるiOSアプリの開発
GoによるiOSアプリの開発
Takuya Ueda
Static Analysis in Go
Static Analysis in Go
Takuya Ueda
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
Takuya Ueda
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
エキスパートGo
エキスパートGo
Takuya Ueda
Go静的解析ハンズオン
Go静的解析ハンズオン
Takuya Ueda
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
Takuya Ueda
Gopher Fest 2017参加レポート
Gopher Fest 2017参加レポート
Takuya Ueda
Google Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめ
Takuya Ueda
Cloud functionsの紹介
Cloud functionsの紹介
Takuya Ueda
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
Takuya Ueda
Mais de Takuya Ueda
(20)
Goにおけるバージョン管理の必要性 − vgoについて −
Goにおけるバージョン管理の必要性 − vgoについて −
WebAssembly with Go
WebAssembly with Go
GAE/Goとsyncパッケージ
GAE/Goとsyncパッケージ
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発
そうだ、Goを始めよう
そうだ、Goを始めよう
マスター・オブ・goパッケージ
マスター・オブ・goパッケージ
メルカリ カウルのマスタデータの更新
メルカリ カウルのマスタデータの更新
Go1.8 for Google App Engine
Go1.8 for Google App Engine
Go Friday 傑作選
Go Friday 傑作選
GoによるiOSアプリの開発
GoによるiOSアプリの開発
Static Analysis in Go
Static Analysis in Go
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
エキスパートGo
エキスパートGo
Go静的解析ハンズオン
Go静的解析ハンズオン
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
Gopher Fest 2017参加レポート
Gopher Fest 2017参加レポート
Google Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめ
Cloud functionsの紹介
Cloud functionsの紹介
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
Último
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
Último
(10)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
Goでwebアプリを開発してみよう
1.
GoでWebアプリを 開発してみよう 2016/12/08(木) @Go言語LT大会! 「最近、Go言語始めました」の会 The Go gopher
was designed by Renee French. The gopher stickers was made by Takuya Ueda. Licensed under the Creative Commons 3.0 Attributions license.
2.
自己紹介 メルカリ/ソウゾウ 上田拓也 twitter: @tenntenn ■ Go歴
/ GAE歴 Go:5〜6年くらい? GAE:最近再開、GCPUG Tokyoのスタッフ ■ 業務 GAE/Goでメルカリアッテを作ってます Goのコミュニティを盛り上げる仕事 Gopherを描く仕事(LINEスタンプ)
3.
アジェンダ ■ net/httpパッケージ ● 動かしてみよう ●
ハンドラ ● レスポンス ● リクエスト ■ html/templateパッケージ ● テンプレートエンジンとは ● 値埋め込んでみる ■ net/http/httptestパッケージ ● ハンドラをテストしてみよう
4.
net/httpパッケージ
5.
Hello, net/http パッケージ ■
まずは動かしてみよう package main import "fmt" import "net/http" func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) } func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Hello, net/http!") }
6.
ハンドラ ■ ハンドラ ■ ハンドラの登録 func
handler(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Hello, net/http!") } http.HandleFunc("/", handler) レスポンスを書き込むWriter リクエスト レスポンスの書き込み /というパターンのパスで来たリクエストを ハンドリングする関数を登録
7.
HTTPサーバの起動 ■ ListenAndServe http.ListenAndServe(":8080", nil) ホスト名:ポート番号 ホスト名を省略するとlocalhost HTTPハンドラ nilだとhttp.DefaultServeMux Listenするとここで処理が ブロックされリクエストを待つ
8.
http.Handlerインタフェース ■ ハンドラはインタフェースとして定義される type Handler
interface { ServeHTTP(ResponseWriter, *Request) } ServeHTTPメソッドを持つ型が ハンドラとして扱われる
9.
http.Handlerの登録 ■ http.Handleでhttp.Handlerを登録 func Handle(pattern
string, handler http.Handler) ServeHTTPメソッドを持つ型が ハンドラとして扱われる 実際には、ServeHTTPメソッドを 持つ型の具体的な値がくる
10.
http.HandlerFunc ■ http.HandlerFuncとは? type HandlerFunc
func(ResponseWriter, *Request) func (f HandlerFunc) ServeHTTP( w ResponseWriter, r *Request) { f(w, r) } ServeHTTPメソッドを 関数に実装させるための型
11.
http.HandleFuncは何をしてるのか ■ http.HandleFunc ● 関数をハンドラとして登録する ●
関数をhttp.HandlerFuncに変換する ● http.Handleで登録する func HandleFunc( pattern string, handler func(ResponseWriter, *Request)) Handlerは登録されるもの Handleは登録する関数
12.
http.ServeMuxについて ■ http.ServeMuxとは? ● 複数のハンドラをまとめる ●
パスによって使うハンドラを切り替える ● 自身もhttp.Handlerを実装している ● http.Handleとhttp.HandleFuncはデ フォルトのhttp.ServeMuxである http.DefaultServeMuxを使用している
13.
http.ResponseWriterについて ■ http.ResponseWriterインタフェース ● io.Writerと同じWriteメソッドをもつ ○
ResposeWriteを満たすとio.Writerを満たす ● io.Writerとしても振る舞える ○ fmt.Fprint*の引数に取れる ○ json.NewEncoderの引数に取れる インタフェースなので モックも作りやすい=テスト簡単
14.
HTMLの表示 ■ ResponseWriterにHTMLを書き込む func root(w
http.ResponseWriter, r *http.Request) { fmt.Fprint(w, guestbookForm) } const guestbookForm = ` <html> ... </html> ` HTMLを書き込めばブラウザが HTMLをレンダリングしてくれる
15.
http.Requestについて ■ http.Requesetとは? ● HTTPリクエストを表す ●
ヘッダーやBodyがとれる ● FormValueメソッドでリクエストで送られた 値を取り出せる
16.
ユーザ入力を受け付ける ■ リクエストからFormデータを取得する func handler(w
http.ResponseWriter, r *http.Request) { v := r.FormValue("myvalue") fmt.Fprint(w, v) } <form action="/post" method="post"> <input type="text" name="myvalue"> <input type="submit" value="post"> </form> Go HTML POSTで送られた 値を取得できる
17.
templateパッケージ
18.
テンプレートエンジンの利用 ■ html/templateを使う ● Go標準のテンプレートエンジン ●
text/templateのHTML特化版 ■ テンプレートの生成 ■ テンプレートに埋め込む template.New("sign").Parse(signTemplateHTML) テンプレート名 HTML template.Mustはエラーを panicに変換する関数 signTemplate.Execute(w, r.FormValue("content")) リクエストから貰った値を埋め込む
19.
よく使うテンプレートの記法 ■ その文脈でトップレベルのデータを埋め込む ■ フィールドやメソッド ■
条件分岐 ■ 繰り返し {{.}} {{.Filed}} {{.Method arg1 arg2}} {{if .}}{{.Filed}}{{else}}NO{{end}} {{range .}}{{.}}{{end} rangeの中の {{.}}は要素になる
20.
データの埋め込み ■ HTMLにリクエストの値を埋め込む const signTemplateHTML
= ` <html> <body> <p>You wrote:</p> <pre>{{.}}</pre> </body> </html> ` signTemplate.Execute(w, r.FormValue("content")) ここに埋め込まれる
21.
net/http/httptestパッケージ
22.
httptestパッケージについて ■ 何ができるのか? ● ハンドラのテストのための機能など ●
ResponseRecorder ○ ResponseWriterを実装している ● NewRequestメソッド(1.7以上) ○ 簡単にテスト用のリクエストが作れる
23.
テストの例 ■ このコードをテストする package main import
"fmt" import "net/http" func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) } func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Hello, net/http!") }
24.
テストの例 func TestSample(t *testing.T)
{ w := httptest.NewRecorder() r := httptest.NewRequest("GET", "/", nil) handler(w, r) rw := w.Result() defer rw.Body.Close() if rw.StatusCode != http.StatusOK { t.Fatal("unexpected status code") } b, err := ioutil.ReadAll(rw.Body) if err != nil {t.Fatal("unexpected error)} const expected = "Hello, net/http!" if s := string(b); s != expected { t.Fatalf("unexpected response: %s", s) } } テスト用のReponseWriterと Requestを作る
25.
まとめ ● net/httpパッケージで簡単にHTTPサーバ作 れる ● html/templateパッケージでHTML用のテン プレートエンジンが提供されている ●
net/http/httptestパッケージでハンドラ のテストができる
26.
Thank you! twitter: @tenntenn Qiita:
tenntenn connpass: tenntenn
Baixar agora