SlideShare a Scribd company logo
Go 1.7のContextを
net/httpで使ってみた
Go conference 2017
@fkm / @mokelab
Go conference 2017 Lightning talk
● スマホアプリを書いたり
● レクチャーしたり
● 情報発信したり
何やってるの?
● グッズもあるよ♪
何やってるの?
Context
とは?
リクエストの
キャンセル用
インターフェース
は、@lestrratさんが
きっと説明済み。。。
そのリクエストに
関するデータを
保存できる
WithValue()
c := r.Context()
c = context.WithValue(
c,
"name", // キー
"moke", // 値
)
いれる
c := r.Context()
name := c.Value("name")
// nameは
// interface{} or nil
とってくる
// interface{}なので。。。
name, ok :=
c.Value("name").(string)
if !ok {
// エラーレスポンス
}
とってくる
現実の
課題
func myHandler(w, r) {
contentType := ...
auth := ...
accept := ...
// メインの処理
}
とあるHandler
func getUserHandler(w, r) {
contentType := ...
auth := ...
accept := ...
// メインの処理
}
別のHandler
前処理
こんな風にしたい
Request
前処理
メインの
処理
エラー
インターフェースが
変わる(><)
Contextの出番
Request
前処理
メインの
処理
インターフェースは
そのまま
Context
ライブラリ書いてみた
イメージ
Request
メインの
処理
Context
取得
書き込み
リクエストに
関する情報だけ
いれるべし
// GET /users/{id} 用
handler := hop.Operations(
hop.GetContentType,
hop.GetPathString("id"),
)(mainHandler)
コードは?
// getter関数で
// 前処理の結果を取ってくる
func mainHandler(w, r) {
contentType :=
hop.ContentType(r.Context())
...
}
コードは?
handler := hop.Operations(
hop.GetContentType,
hop.GetPathString("id"),
)(mainHandler)
何がいいの?
関数!
intとかstringとかいれると
怒られるよ
$ golint
main.go:10:6: should not use
basic type string as key in
context.WithValue
WithValueのキー
別名をつければいいよ
type cKey string
const keyID cKey = "id"
c = context.WithValue(c,
keyID, "id1234")
WithValueのキー
素敵な
Contextライフを!

More Related Content

What's hot (20)

PDF
条件式評価器の実装による管理ツールの抽象化
Takuya Ueda
 
PDF
An Internal of LINQ to Objects
Yoshifumi Kawai
 
PDF
Reactive Extensionsで非同期処理を簡単に
Yoshifumi Kawai
 
PDF
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
Yoshifumi Kawai
 
PDF
LINQ in Unity
Yoshifumi Kawai
 
PPTX
RuntimeUnitTestToolkit for Unity
Yoshifumi Kawai
 
PDF
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Shoot Morii
 
PDF
Mono is Dead
melpon
 
PDF
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
Masahiro Wakame
 
PPTX
Rxに入門しようとしている
onotchi_
 
PDF
How to Make Own Framework built on OWIN
Yoshifumi Kawai
 
PDF
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
hecomi
 
PDF
Async design with Unity3D
Kouji Hosoda
 
PPTX
UniRx勉強会 reactive extensions inside(公開用)
wilfrem
 
ODP
Node handson
Makoto Kishimoto
 
KEY
AFNetworking使ってみた
Taro Matsuzawa
 
PPTX
async/await のしくみ
信之 岩永
 
PDF
JavaScript経験者のためのGo言語入門
Shohei Arai
 
ODP
こんにちはGroovy
irof N
 
PDF
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
parrotstudio
 
条件式評価器の実装による管理ツールの抽象化
Takuya Ueda
 
An Internal of LINQ to Objects
Yoshifumi Kawai
 
Reactive Extensionsで非同期処理を簡単に
Yoshifumi Kawai
 
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
Yoshifumi Kawai
 
LINQ in Unity
Yoshifumi Kawai
 
RuntimeUnitTestToolkit for Unity
Yoshifumi Kawai
 
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Shoot Morii
 
Mono is Dead
melpon
 
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
Masahiro Wakame
 
Rxに入門しようとしている
onotchi_
 
How to Make Own Framework built on OWIN
Yoshifumi Kawai
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
hecomi
 
Async design with Unity3D
Kouji Hosoda
 
UniRx勉強会 reactive extensions inside(公開用)
wilfrem
 
Node handson
Makoto Kishimoto
 
AFNetworking使ってみた
Taro Matsuzawa
 
async/await のしくみ
信之 岩永
 
JavaScript経験者のためのGo言語入門
Shohei Arai
 
こんにちはGroovy
irof N
 
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
parrotstudio
 

Viewers also liked (8)

PDF
Coding in the context era
lestrrat
 
PDF
My client wanted their apps synced, and I made it with Go
Toru Furukawa
 
PDF
go 1.8 net/http timeouts
Yahoo!デベロッパーネットワーク
 
PDF
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Yahoo!デベロッパーネットワーク
 
PDF
Goをカンストさせる話
Moriyoshi Koizumi
 
PDF
20171105 go con2017_lt
Keigo Suda
 
PPTX
Gocon2017:Goのロギング周りの考察
貴仁 大和屋
 
PDF
GOCON Autumn (Story of our own Monitoring Agent in golang)
Huy Do
 
Coding in the context era
lestrrat
 
My client wanted their apps synced, and I made it with Go
Toru Furukawa
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Yahoo!デベロッパーネットワーク
 
Goをカンストさせる話
Moriyoshi Koizumi
 
20171105 go con2017_lt
Keigo Suda
 
Gocon2017:Goのロギング周りの考察
貴仁 大和屋
 
GOCON Autumn (Story of our own Monitoring Agent in golang)
Huy Do
 
Ad

Similar to Go conference 2017 Lightning talk (20)

PDF
F#によるFunctional Programming入門
bleis tift
 
PDF
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
decode2016
 
PDF
Pfi Seminar 2010 1 7
Preferred Networks
 
PDF
TypeScript と Visual Studio Code
Akira Inoue
 
PPTX
10年目の『エブリスタ』を支える技術
DeNA
 
PPTX
Unity C#3からC#6に向けて
onotchi_
 
PDF
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
Taisuke Fukuno
 
PDF
Functional JavaScript with Lo-Dash.js
Shogo Sensui
 
PDF
勉強会force#4 Chatter Integration
Kazuki Nakajima
 
PDF
TypeScript 1.0 オーバービュー
Akira Inoue
 
PPTX
C#6.0の新機能紹介
Kazunori Hamamoto
 
PDF
速くなければスマフォじゃない - インターンバージョン-
Kazunari Hara
 
PPT
Titanium Mobile
Naoya Ito
 
KEY
第5回LinkedData勉強会@yayamamo
yayamamo @ DBCLS Kashiwanoha
 
PDF
React.jsでクライアントサイドなWebアプリ入門
spring_raining
 
PDF
How Smalltalker Works
Sho Yoshida
 
PDF
OSSから学ぶSwift実践テクニック
庸介 高橋
 
PDF
Tokyo r 25_lt_isobe
Masayuki Isobe
 
PPT
言語処理系入門€10
Kenta Hattori
 
PPTX
やや関数型を意識した風Elixir/Phoenixご紹介
fukuoka.ex
 
F#によるFunctional Programming入門
bleis tift
 
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
decode2016
 
Pfi Seminar 2010 1 7
Preferred Networks
 
TypeScript と Visual Studio Code
Akira Inoue
 
10年目の『エブリスタ』を支える技術
DeNA
 
Unity C#3からC#6に向けて
onotchi_
 
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
Taisuke Fukuno
 
Functional JavaScript with Lo-Dash.js
Shogo Sensui
 
勉強会force#4 Chatter Integration
Kazuki Nakajima
 
TypeScript 1.0 オーバービュー
Akira Inoue
 
C#6.0の新機能紹介
Kazunori Hamamoto
 
速くなければスマフォじゃない - インターンバージョン-
Kazunari Hara
 
Titanium Mobile
Naoya Ito
 
第5回LinkedData勉強会@yayamamo
yayamamo @ DBCLS Kashiwanoha
 
React.jsでクライアントサイドなWebアプリ入門
spring_raining
 
How Smalltalker Works
Sho Yoshida
 
OSSから学ぶSwift実践テクニック
庸介 高橋
 
Tokyo r 25_lt_isobe
Masayuki Isobe
 
言語処理系入門€10
Kenta Hattori
 
やや関数型を意識した風Elixir/Phoenixご紹介
fukuoka.ex
 
Ad

Recently uploaded (9)

PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PDF
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PDF
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 

Go conference 2017 Lightning talk