SlideShare a Scribd company logo
1 of 54
Download to read offline
マスター オブ
ゴールーチン
アンド
チャネル
2013/1/19(Sat)
スタートGo #1
@GDG名古屋
自己紹介

上田拓也
豊橋技術科学大学大学院
電子・情報工学専攻
博士後期課程3年

twitter : @tenntenn
blog: http://u.hinoichi.net
アジェンダ

● 前回までのお話
● マスター オブ ゴールーチン アンド チャネル
● 何か作って練習しよう!
アジェンダ

● 前回までのお話 ←今ココ
 ○ Go言語の特徴
 ○ 基本的な文法
 ○ Gopher君のかわいさ(重要)
● マスター オブ ゴールーチン アンド チャネル
● 何か作って練習しよう!
前回までのお話
Go言語の特徴

● シンプルな文法/設計
 ○   曖昧さを排除した設計
 ○   強い静的型付け
 ○   型推論ができるので、型を省略できる
 ○   ポインタはあるがポインタ演算はなし
 ○   複数の戻り値を返す関数
 ○   ダックタイピング
● ゴールーチンとチャネル
● 豊富なライブラリ群
 ○ goツールは最強
 ○ Web系パッケージの豊富さ
 ○ Google App Engine for go
基本的な文法 その1
package main    ← main関数のある
                 パッケージは必ずmain
import "fmt"

func main() {
   fmt.Println("Hello, 世界")
}
基本的な文法 その1
package main

import "fmt"    ← importで使いたいパッケー
                ジをインポートする
func main() {
   fmt.Println("Hello, 世界")
}
基本的な文法 その1
package main

import "fmt"

func main() {    ← funcで関数を宣言
   fmt.Println("Hello, 世界")
}
基本的な文法 その1
package main

import "fmt"

func main() {
   fmt.Println("Hello, 世界")
} ↑↑
    他のパッケージの関数などは
    パッケージ名を付けて呼び出
    す
基本的な文法 その1
package main

import "fmt"

func main() {
   fmt.Println("Hello, 世界")
} ↑↑
    行末に文の区切りを表すセミコロンは不
    要
    勝手にコンパイラが付ける(重要)
基本的な文法 その2
package main
import "fmt"
func main() {
   var s1 string = "Hello, " ← varで変数を宣言
   s2 := "世界"                 型は後ろに書く
   fmt.Println(s1 + s2)
}
基本的な文法 その2
package main
import "fmt"
func main() {
   var s1 string = "Hello, "
   s2 := "世界"               ← := で宣言&初期化
                              型は省略可
   fmt.Println(s1 + s2)
}
基本的な文法 その3
package main
import "fmt"
func isOdd(n int) bool { ← 戻り値は後ろに書く
   return n % 2 == 0       引数の型も後ろ
}
func main() {
   if isOdd(100) {
        fmt.Println("偶数")
   } else {
        fmt.Println("奇数")
   }
}
基本的な文法 その3
package main
import "fmt"
func isOdd(n int) bool {
   return n % 2 == 0
}
func main() {
   if isOdd(100) {        ← ifの()はいらない
        fmt.Println("偶数")
   } else {
        fmt.Println("奇数")
   }
}
基本的な文法 その4
package main
import "fmt"
func fact(n int) int {
   m := 1
   for i := 2; i <= n; i++ {   ← forの()はいらない
       m *= i
   }
   return m
}
func main() {
   fmt.Println(fact(5))
}
基本的な文法 その5
package main
import "fmt"
func main() {
   strs := [5]string{"A", "B", "C", "D", "E"}
   slice := strs[1:3]         ↑
   // 0 B                     配列
   // 1 C                     ポインタではなく値でやり取り
   for i, s := range slice {
                              (重要)
       fmt.Println(i, s)
   }
}
基本的な文法 その5
package main             strs : "A" "B" "C" "D" "E"
import "fmt"
func main() {
                                         slice
   strs := [5]string{"A", "B", "C", "D", "E"}
   slice := strs[1:3]         ←スライス
   // 0 B                      配列を切り取ったもの
   // 1 C                      値ではなく参照
   for i, s := range slice {
                              ※ 通常は配列は使わない
       fmt.Println(i, s)      slice := []{1, 2, 3}
   }
}
基本的な文法 その5
package main
import "fmt"
func main() {
   strs := [5]string{"A", "B", "C", "D", "E"}
   slice := strs[1:3]
   // 0 B
   // 1 C
   for i, s := range slice { ← rangeでfor each
       fmt.Println(i, s)
   }
}
基本的な文法 その6
package main
import "fmt"
type Student struct { ← typeで型を宣言
   no string            type 名前 実体
   name string
}
func main() {
   s := &Student{"041701", "Takuya Ueda"}
   fmt.Println(s)
}
基本的な文法 その6
package main
import "fmt"
type Student struct {
   no string
   name string
}
func main() {
   s := &Student{"041701", "Takuya Ueda"}
   fmt.Println(s) ↑
}                 構造体の初期化
                &でポインタ
基本的な文法 その7
package main
import "fmt"
type Hex int     ← 組込み型のエイリアス
func (h Hex) String() {
   return fmt.Sprintf("%x")
}
func main() {
   fmt.Println(Hex(100))
}
基本的な文法 その7
package main
import "fmt"
type Hex int
func (h Hex) String() string {     ← メソッド
                                    指定した型の値を
   return fmt.Sprintf("0x%x", int(h))
}                                   レシーバとして
                                    メソッドを作る
func main() {
   fmt.Println(Hex(100))
}
基本的な文法 その7
package main
import "fmt"
type Hex int
func (h Hex) String() string {
   return fmt.Sprintf("0x%x", int(h))
}                               ↑
func main() {                   型(値)でキャスト
   fmt.Println(Hex(100))
}
基本的な文法 その7                     fmtパッケージにて宣言
package main                   type interface Stringer {
import "fmt"                      String() string
type Hex int                   }
func (h Hex) String() string {             実装
   return fmt.Sprintf("0x%x", int(h))
}
func main() {
   fmt.Println(Hex(100))
}
        ↑ fmt.Stringerとして振る舞う
        (ダックタイピング)
        0x64と出力される
問題を解いてみよう!




         ※ここまで1時間の予定
その前に、単体テストのやり方!
// hoge.go
package hoge
func FooBar() string {
                           ← テスト対象
    return "foobar"
}
// hoge_test.go ← xxx_test.goはテストコード
package hoge
import "testing"
func TestHoge(t *testing.T) {
    if FooBar() != "foobar" {
        t.Errorf("foobarと返す必要があります")
    } ↑
}      TestXxx(t *testing.T)はテストメソッド
その前に、単体テストのやり方!
● goツールのtestで単体テストが実行できる
 ○ $ go test パッケージ名
   ■ パッケージ名を指定する
 ○ $ go test
   ■ カレントディレクトリのテストを実行
● 1つのgoファイル毎に1つのテストファイルを作るのが
 Go言語流
問題1
偶数個の要素を持つ、任意の文字列のスライスからラン
ダムにペアを作るプログラムを作成せよ。なお、テスト
コードが通るように作ること。
Gopher君を拝んで休憩




http://golang.org   http://dancallahan.info/journal/go-overview/

       Gopher               Gopher
      (マスコット)            (Go言語ユーザ)
アジェンダ

● 前回までのお話
● マスター オブ ゴールーチン アンド チャネル ←
  今ココ
 ○ ゴールーチン
 ○ チャネル
● 何か作って練習しよう!
マスター・オブ
ゴールーチン
  アンド
 チャネル
  やっと本題です!
Concurrency is not Parallelism
● ConcurrencyとParallelismは違う by Rob Pike
   ○ Concurrency=並行?
   ○ Parallelism=並列?
     ■ たぶん
● Concurrency
   ○ 同時にいくつかの事を扱う事
● Parallelism
   ○ 同時にいくつかの計算を行なう事
Concurrency is... by Rob Pike
Rob Pike氏のプレゼンのまとめでは、
  ○ Concurrency is powerful.
  ○ Concurrency is not parallelism.
  ○ Concurrency enables parallelism.
  ○ Concurrency makes parallelism (and scaling
     and everything else) easy.
とある。
ゴールーチンとは?
● Go言語ではゴールーチンを用いてConcurrencyを実
  現している
● スレッドに似ている...
  ○ しかし、もっとCheap(=コストが低い)
  ○ LinuxやUnixのスレッドとは違う
    ■ スレッドの上にいくつも乗っている
ゴールーチンを使うには?
● 「go 関数呼び出し」

【例】
  func main() {
     go f() // 終了を待たない
     g() // すぐにここに来る
  }
go + クロージャ
package main
import "fmt"
func main() {
   go func() {
       fmt.Println("別のゴールーチン")
   }()
   fmt.Println("mainゴールーチン")
}
並列度
● デフォルトでは並列度は1になっている
  ○ runtime.NumCPU()で利用可能なコア数が取得
     できる
  ○ runtime.GOMAXPROCS()で並列度を設定する
  【例】
  runtime.GOMAXPROCS(runtime.NumCPU())
● 指定した並列度でゴールーチンを動かす
  ○ あまり増やしても意味がない
ゴールーチン間のデータのやりとり
● 共有の変数を使う?
 func main() {
    done := false
    go func() {
        time.Sleep(time.Second * 3)
        done = true
    }()
    for !done {
        time.Sleep(time.Millisecond)
    }
 }
これは大丈夫?
// これはダメ!!                           // 続き
package main                             for i := 1; i <= 10; i++ {
import "fmt"                                 fmt.Println(n, "+", i)
import "time"                                n += 1
func main() {                                time.Sleep(500)
    n := 1                               }
    go func() {                      }
        for i := 2; i <= 5; i++ {
            fmt.Println(n, "*", i)
            n *= i
        }                                      だめ!!
    }()
// 続く
何が問題なのか?どう解決するの?
【問題】
● 同時に複数のゴールーチンからアクセス
● 競合が起きる
【解決方法】
● 1つのゴールーチンからのみアクセスする
● チャネルを使う!
チャネルとは?
● ゴールーチン間でデータをやりとりする経路?のよう
 なもの
 ○ CSPが元になっている
   ■ C. A. R. Hoare: Communicating Sequential
     Processes (CACM 1978)
チャネルとは?
● ゴールーチン間でデータをやりとりするパイプ?のよ
 うなもの




ゴールーチン1     "hoge"   ゴールーチン2


           チャネル
チャネルとは?
● チャネルへデータを送ったり、チャネルからデータを
 受け取ったりできるゴールーチンは同時に1つのみ
 (排他制御)



ゴールーチン1     "hoge"   ゴールーチン2


           チャネル
チャネルの宣言方法と使い方
● 宣言
 ○ ch := make(chan 型) // 容量0
 ○ ch := make(chan 型, 容量)
● 送信
 ○ ch <- 100
 ○ ch <- "hoge"
   ■ 容量いっぱいであれば取り出されるの待機する
   ■ 容量0の場合は常に待つ
● 受信
 ○ n := <- ch
   ■ 送られてくるまで待機する
チャネルの宣言方法と使い方
func main() {
  done := make(chan bool) // 容量0
  go func() {
      time.Sleep(time.Second * 3)
      done <- true
  }()
  <-done // 待つ
  fmt.Println("done")
}
どう使って行くのか?
● 沢山の独立したゴールーチンがチャネルを使っ
 てやり取りをする!
 ○ Concurrencyになる
● ゴールーチンのコストは安いので、沢山作って
 もそんなに問題ない
 ○ ※コストが0ではない
ファーストクラスオブジェクト
● チャネルはファーストクラスオブジェクト
 ○ 変数に入れれる
 ○ 引数に渡せる
 ○ 戻り値に取れる
● 戻り値として、チャネルを返す関数は多用される
 ○ timeパッケージ
 ○ 5分間待つ
   <-time.After(5 * time.Minute)
ReadOnlyとWriteOnly
● 通常のチャネルは双方向
 ○ 引数や戻り値で渡す場合は困る
 func hoge(in chan int) {
    n := <-in // 入力として使うのが正解!
    in <- 100 // 間違った使い方ができる!
 }
ReadOnlyとWriteOnly
● ReadOnly
  ○ in := make(<-chan int)
● WriteOnly
  ○ out := make(chan<- int)
● キャスト
  ○ 双方向チャネルはキャストでReadOnlyまたは
    WriteOnlyに変化できる
  ○ ch := make(chan int)
  ○ in := (<-chan int)(ch)
  ○ out := (chan<- int)(ch)
range
● for文のrangeで送られてくるデータを次々に取
  り出せる
  // 1分ごとに現在時間を出す
  for now := range time.Tick(1 * time.Minute) {
      fmt.Println(now)
  }
select
● selectで同時に複数のチャネルからの受信を待
  つことができる
  // タイムアウトの処理
  select {
  case m := <-ch:
          // mを使った処理
  case <-time.After(5 * time.Minute):
          fmt.Println("タイムアウト")
  }
問題2

フィボナッチ数列を生成する関数を作成せよ。
なお、テストコードが通るように。
問題3

0〜nまでの数列を生成するプログラムを作成せ
よ。
また、上記のプログラムで作成した数列をstep分
だけ飛ばすプログラムを作成せよ。
なお、テストコードが通るように作成せよ。

More Related Content

What's hot

F#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングF#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミング
satoshimurakumo
 
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみたReal World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみた
blackenedgold
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
Naoki Kitora
 

What's hot (20)

Cython ことはじめ
Cython ことはじめCython ことはじめ
Cython ことはじめ
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
 
関数型プログラミング入門 for Matlab ユーザー
関数型プログラミング入門 for Matlab ユーザー関数型プログラミング入門 for Matlab ユーザー
関数型プログラミング入門 for Matlab ユーザー
 
Python勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージPython勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージ
 
for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
 
C言語講習会3
C言語講習会3C言語講習会3
C言語講習会3
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章
 
[第2版]Python機械学習プログラミング 第14章
[第2版]Python機械学習プログラミング 第14章[第2版]Python機械学習プログラミング 第14章
[第2版]Python機械学習プログラミング 第14章
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数
 
F#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングF#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミング
 
研究生のためのC++ no.3
研究生のためのC++ no.3研究生のためのC++ no.3
研究生のためのC++ no.3
 
Freer Monads, More Extensible Effects
Freer Monads, More Extensible EffectsFreer Monads, More Extensible Effects
Freer Monads, More Extensible Effects
 
C言語講習会2
C言語講習会2C言語講習会2
C言語講習会2
 
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみたReal World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみた
 
yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
 

Viewers also liked

cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
Hidenori Takeshita
 
Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるChrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみる
Masakazu Muraoka
 

Viewers also liked (20)

Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語
 
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
 
Goをえらんだ理由
Goをえらんだ理由Goをえらんだ理由
Goをえらんだ理由
 
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
 
20151029 ヒカラボ講演資料
20151029 ヒカラボ講演資料20151029 ヒカラボ講演資料
20151029 ヒカラボ講演資料
 
PEP8を読んでみよう
PEP8を読んでみようPEP8を読んでみよう
PEP8を読んでみよう
 
Yahoo! JAPANのCloud Foundry導入状況
Yahoo! JAPANのCloud Foundry導入状況Yahoo! JAPANのCloud Foundry導入状況
Yahoo! JAPANのCloud Foundry導入状況
 
Deploy to Lobi
Deploy to LobiDeploy to Lobi
Deploy to Lobi
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
 
alphawing meets heroku
alphawing meets herokualphawing meets heroku
alphawing meets heroku
 
Eureka go 2015_12_12
Eureka go 2015_12_12Eureka go 2015_12_12
Eureka go 2015_12_12
 
Github第8章
Github第8章Github第8章
Github第8章
 
HighBatch
HighBatchHighBatch
HighBatch
 
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
 
Goを知る
Goを知るGoを知る
Goを知る
 
Chrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみるChrome osとgo言語からgoogleの今後を妄想してみる
Chrome osとgo言語からgoogleの今後を妄想してみる
 
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
 
Go+revel
Go+revelGo+revel
Go+revel
 
Golang, make and robotics #gocon
Golang, make and robotics #goconGolang, make and robotics #gocon
Golang, make and robotics #gocon
 
Go言語と過ごした一週間
Go言語と過ごした一週間Go言語と過ごした一週間
Go言語と過ごした一週間
 

Similar to マスターオブゴールーチンアンドチャネル スタートGo #1

Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
Akira Takahashi
 
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
Hiro H.
 
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式
digitalghost
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
 

Similar to マスターオブゴールーチンアンドチャネル スタートGo #1 (20)

競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
 
明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理
 
C-langage
C-langageC-langage
C-langage
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
 
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
 
やさしく知りたいC言語
やさしく知りたいC言語やさしく知りたいC言語
やさしく知りたいC言語
 
DATUM STUDIO PyCon2016 Turorial
DATUM STUDIO PyCon2016 TurorialDATUM STUDIO PyCon2016 Turorial
DATUM STUDIO PyCon2016 Turorial
 
ディープニューラルネット入門
ディープニューラルネット入門ディープニューラルネット入門
ディープニューラルネット入門
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式
 
Python standard 2022 Spring
Python standard 2022 SpringPython standard 2022 Spring
Python standard 2022 Spring
 
言語処理系入門€10
言語処理系入門€10言語処理系入門€10
言語処理系入門€10
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
More C++11
More C++11More C++11
More C++11
 
Pythonintro
PythonintroPythonintro
Pythonintro
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
Goをカンストさせる話
Goをカンストさせる話Goをカンストさせる話
Goをカンストさせる話
 

More from Takuya Ueda

More from Takuya Ueda (20)

Goにおけるバージョン管理の必要性 − vgoについて −
Goにおけるバージョン管理の必要性 − vgoについて −Goにおけるバージョン管理の必要性 − vgoについて −
Goにおけるバージョン管理の必要性 − vgoについて −
 
WebAssembly with Go
WebAssembly with GoWebAssembly with Go
WebAssembly with Go
 
GAE/Goとsyncパッケージ
GAE/GoとsyncパッケージGAE/Goとsyncパッケージ
GAE/Goとsyncパッケージ
 
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発
 
そうだ、Goを始めよう
そうだ、Goを始めようそうだ、Goを始めよう
そうだ、Goを始めよう
 
マスター・オブ・goパッケージ
マスター・オブ・goパッケージマスター・オブ・goパッケージ
マスター・オブ・goパッケージ
 
メルカリ カウルのマスタデータの更新
メルカリ カウルのマスタデータの更新メルカリ カウルのマスタデータの更新
メルカリ カウルのマスタデータの更新
 
Go1.8 for Google App Engine
Go1.8 for Google App EngineGo1.8 for Google App Engine
Go1.8 for Google App Engine
 
Go Friday 傑作選
Go Friday 傑作選Go Friday 傑作選
Go Friday 傑作選
 
GoによるiOSアプリの開発
GoによるiOSアプリの開発GoによるiOSアプリの開発
GoによるiOSアプリの開発
 
Static Analysis in Go
Static Analysis in GoStatic Analysis in Go
Static Analysis in Go
 
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 
エキスパートGo
エキスパートGoエキスパートGo
エキスパートGo
 
Go静的解析ハンズオン
Go静的解析ハンズオンGo静的解析ハンズオン
Go静的解析ハンズオン
 
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
 
Gopher Fest 2017参加レポート
Gopher Fest 2017参加レポートGopher Fest 2017参加レポート
Gopher Fest 2017参加レポート
 
Google Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめGoogle Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめ
 
Cloud functionsの紹介
Cloud functionsの紹介Cloud functionsの紹介
Cloud functionsの紹介
 

Recently uploaded

Recently uploaded (11)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

マスターオブゴールーチンアンドチャネル スタートGo #1