SlideShare a Scribd company logo
1 of 56
Download to read offline
いまさら聞けない
select あれこれ
Go Allstars 2 (Oct 2, 2016)
牧大輔 / Daisuke Maki (lestrrat)
HDE株式会社
• 牧大輔 (lestrrat)
• 株式会社 HDE
• Perl/Go/C 等
• builderscon 12月3日 開催!

https://builderscon.io/
builderscon
• 12月3日開催!
• Web系エンジニア達に楽しんでもらいつつ、これまでの枠にとらわれない
様々な分野の技術者達が終結!
• 是非「知らなかった、を知る」ためにご来場ください。
• トーク募集中!

https://builderscon.io/builderscon/tokyo/2016/cfp
=
Web+DB Press 10/22
channel++
• 端的に言ってチャンネルは最高
• 排他処理を意識しないデータの移動
• でもチャンネル単体ではできない操作が
結構ある。
func WriteCh(ch chan int) {
ch <- 1 // Could block, bah
}
channels block
• バッファ付きチャンネルでもブロックする可能性
func ReadCh(ch chan int) {
<-ch // Could block, bah
}
channels block
• 読み込みでも書き込みがあるまでブロック
• 戻り値二つの<-chはチャンネルが閉じてあるかどうか
の確認にしか使えないので、やっぱりブロックする
つまり
• 複数のチャンネルを同時に同じgoroutineで
扱いたい場合はどうする?
go func() {
<-ch1
…
}()
go func() {
<-ch2
…
}()
チョットチガウ…
select
• Cのselect使った事ある人: アレです
• 複数のchannelの読み書きを制御してくれる
• Go中級者なら確実にマスターしてるべき
select {
case チャンネル操作:
…
case チャンネル操作:
…
default:

…
}
基本形
func CanWeRead(ch <-chan int) {
select {
case <-ch:
… // yes, we can read
}
}
読み込み
func CanWeRead(ch <-chan int) {
select {
case <-ch:
… // yes, we can read
}
}
読み込み
ポイント:defaultがないとブ
ロックするよ!
func CanWeRead(ch <-chan int) {
select {
case <-ch:
… // yes, we can read
default:
… // no, we could not read
}
}
読み込み
func CanWeRead(ch <-chan int) {
select {
case <-ch:
… // yes, we can read
default:
… // no, we could not read
}
}
読み込み
ポイント:読み込みが即時でき
ない場合はデフォルトが実行さ
れるので、実質的なノンブロッ
キングI/O
func CanWeRead(ch <-chan int) {
select {
case v, ok := <-ch:
if !ok { // channel is closed
…
}
fmt.Println(v)
}
}
値を使う
func CanWeRead(ch <-chan int) {
select {
case v, ok := <-ch:
if !ok { // channel is closed
…
}
fmt.Println(v)
}
}
値を使う
ポイント:代入もできるよ!
func CanWeWrite(ch chan int) {
select {
case ch<-1:
… // yes, we can write
default:
… // no, we could not write
}
}
書き込み
func CanWeWrite(ch chan int) {
select {
case ch<-1:
… // yes, we can write
default:
… // no, we could not write
}
}
書き込み
ポイント:書き込みが即時でき
ない場合はデフォルトが実行さ
れるので、実質的なノンブロッ
キングI/O
ところで
• nilなチャンネルに対する書き込み・読み込み
の操作ってどうなるか知ってますか?
var ch chan int
<-ch // 初期化してないのでch = nil
• panic?
• ブロック?
• その他?
nil channel
• 読み込み=ブロック
• 書き込み=ブロック
var ch chan int
select {
case <-ch:
…
}
…ということは
var ch chan int
select {
case <-ch:
…
}
…ということは
ポイント:この読み込みが成功するこ
とはない!
select {
case <-ch1:
…
case <-ch2:
ch1 = nil // Disable previous case
}
特定のケースを無効にする
select {
case <-ch1:
…
case <-ch2:
ch1 = nil // Disable previous case
}
特定のケースを無効にする
ポイント:最初は普通にch1から読み
込み可能
select {
case <-ch1:
…
case <-ch2:
ch1 = nil // Disable previous case
}
特定のケースを無効にする
ポイント:ch2から読み込みができた
らch1を無効にしてる。これ以降ch1の
caseは実行されることがない
ch1 = nil
select {
case <-ch1:
…
case <-ch2:
ch1 = … // Enable previous case
}
逆バージョン
ch1 = nil
select {
case <-ch1:
…
case <-ch2:
ch1 = … // Enable previous case
}
逆バージョン
ポイント:最初はch1 = nilなので絶
対にこのcaseは実行されない。有効な
チャンネルを代入すれば動く。
ch1 = nil
select {
case <-ch1:
…
case <-ch2:
ch1 = … // Enable previous case
}
逆バージョン
ポイント:ch1 に有効なチャンネルを
代入すればch1のcaseも有効になる
パターン
• selectを使ったよくつかうパターン集
t := time.NewTimer(30*time.Second)
defer t.Stop()
select {
case <-t.C:
return errors.New(“timeout”)
case ch <- 1:

return nil
}
書き込みタイムアウト
t := time.NewTimer(30*time.Second)
defer t.Stop()
select {
case <-t.C:
return errors.New(“timeout”)
case ch <- 1:

return nil
}
書き込みタイムアウト
ポイント: 書き込みが成功したらエ
ラー無しで脱出
t := time.NewTimer(30*time.Second)
defer t.Stop()
select {
case <-t.C:
return errors.New(“timeout”)
case ch <- 1:

return nil
}
書き込みタイムアウト
ポイント: 書き込むより先にタイム
アウトになったらエラーを返す
t := time.NewTimer(30*time.Second)
defer t.Stop()
for {
select {
case <-t.C: // 30秒後にここにくる
return
default:

// タイムアウトするまで行う操作
}
}
タイムアウトまでループ
t := time.NewTimer(30*time.Second)
defer t.Stop()
for {
select {
case <-t.C: // 30秒後にここにくる
return
default:

// タイムアウトするまで行う操作
}
}
タイムアウトまでループ
ポイント:for で囲まないと一回
defaultの操作をしたら終わっちゃう
ので、無限ループにする
t := time.NewTimer(30*time.Second)
defer t.Stop()
for {
select {
case <-t.C: // 30秒後にここにくる
return
default:

// タイムアウトするまで行う操作
}
}
タイムアウトまでループ
ポイント: タイマーからお知らせが
来たらこのループから脱出
t := time.NewTicker(time.Second)
defer t.Stop()
for {
select {
case <-t.C: // 1秒ごとにここにくる
// 定期的な処理内容
}
}
定期的に実行
t := time.NewTicker(time.Second)
defer t.Stop()
for {
select {
case <-t.C: // 1秒ごとにここにくる
// 定期的な処理内容
}
}
定期的に実行
ポイント:TimerではなくTicker
ところで
• closeされたチャンネルから読み込むとどうなる?
time.AfterFunc(5*time.Second, func() {
close(done)
})
for {
select {
case <-done:

return
default:
// 定期的な処理内容
}
}
“done”チャンネル
time.AfterFunc(5*time.Second, func() {
close(done)
})
for {
select {
case <-done:

return
default:
// 定期的な処理内容
}
}
“done”チャンネル
ポイント: チャンネルをcloseすると
読み込みブロックが解除される
time.AfterFunc(5*time.Second, func() {
close(done)
})
for {
select {
case <-done:

return
default:
// 定期的な処理内容
}
}
“done”チャンネル
ポイント:戻り値は無効だが、ブロッ
クは解けるのでループを脱出できる
for {
select {
case <-ctx.Done():

return
default:
// 定期的な処理内容
}
}
Go 1.7からはContext
Context
• context.Contextができてからselectを使う事
がより多くなった
Context
• I/Oとか関係なくても、「途中で処理を止め
る」系のコードでものすごく良く使う
例:「リストを処理」
for _, data := range list {
select {
case <-ctx.Done():

return
default:
process(data)
}
}
例:「リストを処理」
for _, data := range list {
select {
case <-ctx.Done():

return
default:
process(data)
}
}
ポイント:リスト要素を処理する毎に
Doneをチェックし、必要であれば終了
外道
• いよいよselectの変態的な使いかたを必要とする時
reflect.Select
• 動的にselect文を構築
• プログラム実行中にcaseの数や内容を変更できる
reflect.Select([]reflect.SelectCase{
reflect.SelectCase{Chan: ch1},
reflect.SelectCase{Chan: ch2},
reflect.SelectCase{Chan: ch3},
})
Web+DB Press 10/22
=
まとめ
• チャンネルとselectの複合技で表現の幅が
広がる
• 初級→中級になるには押さえておきたい。
builderscon
• 12月3日開催!
• トーク募集中!

https://builderscon.io/builderscon/tokyo/2016/cfp
Questions?

More Related Content

What's hot

こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能Kohei Tokunaga
 
TIME_WAITに関する話
TIME_WAITに関する話TIME_WAITに関する話
TIME_WAITに関する話Takanori Sejima
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来についてshinjiigarashi
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルMasahito Zembutsu
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知るShuhei Fujita
 

What's hot (20)

Serverless時代のJavaについて
Serverless時代のJavaについてServerless時代のJavaについて
Serverless時代のJavaについて
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
TIME_WAITに関する話
TIME_WAITに関する話TIME_WAITに関する話
TIME_WAITに関する話
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
HTTP/2 入門
HTTP/2 入門HTTP/2 入門
HTTP/2 入門
 

Viewers also liked

条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化Takuya Ueda
 
とあるBtoB企業でGoを使ってみた話
とあるBtoB企業でGoを使ってみた話とあるBtoB企業でGoを使ってみた話
とあるBtoB企業でGoを使ってみた話Aiga Matsuo
 
Coding in the context era
Coding in the context eraCoding in the context era
Coding in the context eralestrrat
 
Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)lestrrat
 
My client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with GoMy client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with GoToru Furukawa
 
Goをカンストさせる話
Goをカンストさせる話Goをカンストさせる話
Goをカンストさせる話Moriyoshi Koizumi
 
Si案件でGo言語を使ってみた!
Si案件でGo言語を使ってみた!Si案件でGo言語を使ってみた!
Si案件でGo言語を使ってみた!Koichiro Nishijima
 
Python&機械学習にHelloWorldして旦那候補を探す
Python&機械学習にHelloWorldして旦那候補を探すPython&機械学習にHelloWorldして旦那候補を探す
Python&機械学習にHelloWorldして旦那候補を探すKiriko Yano
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringYahoo!デベロッパーネットワーク
 
Go conference 2017 Lightning talk
Go conference 2017 Lightning talkGo conference 2017 Lightning talk
Go conference 2017 Lightning talkmokelab
 
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidevSwift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidevTomohiro Kumagai
 
逆説のカスタマーサクセス
逆説のカスタマーサクセス逆説のカスタマーサクセス
逆説のカスタマーサクセスTakaaki Umada
 
HoloLens x Graphics 入門
HoloLens x Graphics 入門HoloLens x Graphics 入門
HoloLens x Graphics 入門hecomi
 
UnityとTVMLはじめました。
UnityとTVMLはじめました。UnityとTVMLはじめました。
UnityとTVMLはじめました。Michiyo Chuman
 
実装だって楽したい!〜リアルタイム通信はじめの一歩〜
実装だって楽したい!〜リアルタイム通信はじめの一歩〜実装だって楽したい!〜リアルタイム通信はじめの一歩〜
実装だって楽したい!〜リアルタイム通信はじめの一歩〜Yuka Tokuyama
 
小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016lestrrat
 
フォントの選び方・使い方
フォントの選び方・使い方フォントの選び方・使い方
フォントの選び方・使い方k maztani
 
goimagick-syokai-II
goimagick-syokai-IIgoimagick-syokai-II
goimagick-syokai-IIYo Ya
 
リクルートにおける画像解析事例紹介
リクルートにおける画像解析事例紹介リクルートにおける画像解析事例紹介
リクルートにおける画像解析事例紹介Recruit Technologies
 
How To Think In Go
How To Think In GoHow To Think In Go
How To Think In Golestrrat
 

Viewers also liked (20)

条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
 
とあるBtoB企業でGoを使ってみた話
とあるBtoB企業でGoを使ってみた話とあるBtoB企業でGoを使ってみた話
とあるBtoB企業でGoを使ってみた話
 
Coding in the context era
Coding in the context eraCoding in the context era
Coding in the context era
 
Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)
 
My client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with GoMy client wanted their apps synced, and I made it with Go
My client wanted their apps synced, and I made it with Go
 
Goをカンストさせる話
Goをカンストさせる話Goをカンストさせる話
Goをカンストさせる話
 
Si案件でGo言語を使ってみた!
Si案件でGo言語を使ってみた!Si案件でGo言語を使ってみた!
Si案件でGo言語を使ってみた!
 
Python&機械学習にHelloWorldして旦那候補を探す
Python&機械学習にHelloWorldして旦那候補を探すPython&機械学習にHelloWorldして旦那候補を探す
Python&機械学習にHelloWorldして旦那候補を探す
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
 
Go conference 2017 Lightning talk
Go conference 2017 Lightning talkGo conference 2017 Lightning talk
Go conference 2017 Lightning talk
 
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidevSwift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
 
逆説のカスタマーサクセス
逆説のカスタマーサクセス逆説のカスタマーサクセス
逆説のカスタマーサクセス
 
HoloLens x Graphics 入門
HoloLens x Graphics 入門HoloLens x Graphics 入門
HoloLens x Graphics 入門
 
UnityとTVMLはじめました。
UnityとTVMLはじめました。UnityとTVMLはじめました。
UnityとTVMLはじめました。
 
実装だって楽したい!〜リアルタイム通信はじめの一歩〜
実装だって楽したい!〜リアルタイム通信はじめの一歩〜実装だって楽したい!〜リアルタイム通信はじめの一歩〜
実装だって楽したい!〜リアルタイム通信はじめの一歩〜
 
小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016小規模でもGKE - DevFest Tokyo 2016
小規模でもGKE - DevFest Tokyo 2016
 
フォントの選び方・使い方
フォントの選び方・使い方フォントの選び方・使い方
フォントの選び方・使い方
 
goimagick-syokai-II
goimagick-syokai-IIgoimagick-syokai-II
goimagick-syokai-II
 
リクルートにおける画像解析事例紹介
リクルートにおける画像解析事例紹介リクルートにおける画像解析事例紹介
リクルートにおける画像解析事例紹介
 
How To Think In Go
How To Think In GoHow To Think In Go
How To Think In Go
 

More from lestrrat

Future of Tech "Conferences"
Future of Tech "Conferences"Future of Tech "Conferences"
Future of Tech "Conferences"lestrrat
 
ONIの世界 - ONIcon 2019 Winter
ONIの世界 - ONIcon 2019 WinterONIの世界 - ONIcon 2019 Winter
ONIの世界 - ONIcon 2019 Winterlestrrat
 
Slicing, Dicing, And Linting OpenAPI
Slicing, Dicing, And Linting OpenAPISlicing, Dicing, And Linting OpenAPI
Slicing, Dicing, And Linting OpenAPIlestrrat
 
Oxygen Not Includedをやるべき4つの理由
Oxygen Not Includedをやるべき4つの理由Oxygen Not Includedをやるべき4つの理由
Oxygen Not Includedをやるべき4つの理由lestrrat
 
Rejectcon 2018
Rejectcon 2018Rejectcon 2018
Rejectcon 2018lestrrat
 
Builderscon tokyo 2018 speaker dinner
Builderscon tokyo 2018 speaker dinnerBuilderscon tokyo 2018 speaker dinner
Builderscon tokyo 2018 speaker dinnerlestrrat
 
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)lestrrat
 
Google container builderと友だちになるまで
Google container builderと友だちになるまでGoogle container builderと友だちになるまで
Google container builderと友だちになるまでlestrrat
 
筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーションlestrrat
 
iosdc 2017
iosdc 2017iosdc 2017
iosdc 2017lestrrat
 
シュラスコの食べ方 超入門
シュラスコの食べ方 超入門シュラスコの食べ方 超入門
シュラスコの食べ方 超入門lestrrat
 
OSSの敵になるのもいいじゃない
OSSの敵になるのもいいじゃないOSSの敵になるのもいいじゃない
OSSの敵になるのもいいじゃないlestrrat
 
Opening: builderscon tokyo 2016
Opening: builderscon tokyo 2016Opening: builderscon tokyo 2016
Opening: builderscon tokyo 2016lestrrat
 
Kubernetes in 20 minutes - HDE Monthly Technical Session 24
Kubernetes in 20 minutes - HDE Monthly Technical Session 24Kubernetes in 20 minutes - HDE Monthly Technical Session 24
Kubernetes in 20 minutes - HDE Monthly Technical Session 24lestrrat
 
Don't Use Reflect - Go 1.7 release party 2016
Don't Use Reflect - Go 1.7 release party 2016Don't Use Reflect - Go 1.7 release party 2016
Don't Use Reflect - Go 1.7 release party 2016lestrrat
 
On internationalcommunityrelations
On internationalcommunityrelationsOn internationalcommunityrelations
On internationalcommunityrelationslestrrat
 
Yapceu 2015 yapc asia tokyo behind the scenes (w/o notes)
Yapceu 2015 yapc asia tokyo behind the scenes (w/o notes)Yapceu 2015 yapc asia tokyo behind the scenes (w/o notes)
Yapceu 2015 yapc asia tokyo behind the scenes (w/o notes)lestrrat
 
YAPC::Asia Tokyo 2012 Closing
YAPC::Asia Tokyo 2012 ClosingYAPC::Asia Tokyo 2012 Closing
YAPC::Asia Tokyo 2012 Closinglestrrat
 
YAPC::Asia Tokyo 2011 Closing
YAPC::Asia Tokyo 2011 ClosingYAPC::Asia Tokyo 2011 Closing
YAPC::Asia Tokyo 2011 Closinglestrrat
 
Running JPA (YAPC::NA 2011)
Running JPA (YAPC::NA 2011)Running JPA (YAPC::NA 2011)
Running JPA (YAPC::NA 2011)lestrrat
 

More from lestrrat (20)

Future of Tech "Conferences"
Future of Tech "Conferences"Future of Tech "Conferences"
Future of Tech "Conferences"
 
ONIの世界 - ONIcon 2019 Winter
ONIの世界 - ONIcon 2019 WinterONIの世界 - ONIcon 2019 Winter
ONIの世界 - ONIcon 2019 Winter
 
Slicing, Dicing, And Linting OpenAPI
Slicing, Dicing, And Linting OpenAPISlicing, Dicing, And Linting OpenAPI
Slicing, Dicing, And Linting OpenAPI
 
Oxygen Not Includedをやるべき4つの理由
Oxygen Not Includedをやるべき4つの理由Oxygen Not Includedをやるべき4つの理由
Oxygen Not Includedをやるべき4つの理由
 
Rejectcon 2018
Rejectcon 2018Rejectcon 2018
Rejectcon 2018
 
Builderscon tokyo 2018 speaker dinner
Builderscon tokyo 2018 speaker dinnerBuilderscon tokyo 2018 speaker dinner
Builderscon tokyo 2018 speaker dinner
 
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
 
Google container builderと友だちになるまで
Google container builderと友だちになるまでGoogle container builderと友だちになるまで
Google container builderと友だちになるまで
 
筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション
 
iosdc 2017
iosdc 2017iosdc 2017
iosdc 2017
 
シュラスコの食べ方 超入門
シュラスコの食べ方 超入門シュラスコの食べ方 超入門
シュラスコの食べ方 超入門
 
OSSの敵になるのもいいじゃない
OSSの敵になるのもいいじゃないOSSの敵になるのもいいじゃない
OSSの敵になるのもいいじゃない
 
Opening: builderscon tokyo 2016
Opening: builderscon tokyo 2016Opening: builderscon tokyo 2016
Opening: builderscon tokyo 2016
 
Kubernetes in 20 minutes - HDE Monthly Technical Session 24
Kubernetes in 20 minutes - HDE Monthly Technical Session 24Kubernetes in 20 minutes - HDE Monthly Technical Session 24
Kubernetes in 20 minutes - HDE Monthly Technical Session 24
 
Don't Use Reflect - Go 1.7 release party 2016
Don't Use Reflect - Go 1.7 release party 2016Don't Use Reflect - Go 1.7 release party 2016
Don't Use Reflect - Go 1.7 release party 2016
 
On internationalcommunityrelations
On internationalcommunityrelationsOn internationalcommunityrelations
On internationalcommunityrelations
 
Yapceu 2015 yapc asia tokyo behind the scenes (w/o notes)
Yapceu 2015 yapc asia tokyo behind the scenes (w/o notes)Yapceu 2015 yapc asia tokyo behind the scenes (w/o notes)
Yapceu 2015 yapc asia tokyo behind the scenes (w/o notes)
 
YAPC::Asia Tokyo 2012 Closing
YAPC::Asia Tokyo 2012 ClosingYAPC::Asia Tokyo 2012 Closing
YAPC::Asia Tokyo 2012 Closing
 
YAPC::Asia Tokyo 2011 Closing
YAPC::Asia Tokyo 2011 ClosingYAPC::Asia Tokyo 2011 Closing
YAPC::Asia Tokyo 2011 Closing
 
Running JPA (YAPC::NA 2011)
Running JPA (YAPC::NA 2011)Running JPA (YAPC::NA 2011)
Running JPA (YAPC::NA 2011)
 

Recently uploaded

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (7)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

いまさら聞けないselectあれこれ