狠狠撸

狠狠撸Share a Scribd company logo
骋辞の文法の実例と解説
オリジナルサイト
Learn X in Y minutes
http://learnxinyminutes.com/docs/go/
オリジナルソース
learngo.go
http://learnxinyminutes.com/docs/files/learngo.go
ブロック分け
全体で約20のセクションで構成されており、順番に処理を呼び出す記述になっています。
少々長いので、いくつかのブロックに分けて「記述して実行」して行きます。
セクション一覧(ブロックは「記述して実行」する単位)
「Hello world!」
package main
import ()
func main()
「複数の引数や戻り値」
func beyondHello()
func learnMultiple(x, y int) (sum, prod int)
「様々な型」
func learnTypes()
「メモリー割り当て」
func learnMemory() (p, q *int)
「フロー制御」
func expensiveComputation() float64
func learnFlowControl()
「遅延実行」
func learnDefer() (ok bool)
「インターフェース」と「構造体」
type Stringer interface
type pair struct
func (p pair) String() string
func learnInterfaces()
「可変引数」
func learnVariadicParams(myStrings ...interface{})
「エラーハンドリング」
func learnErrorHandling()
「同時実行処理」
func inc(i int, c chan int)
func learnConcurrency()
「Webアプリケーション」
func learnWebProgramming()
func (p pair) ServeHTTP(w http.ResponseWriter, r *http.Request)
実際にやってみよう!
テキストエディターでlearngo01.goをUTF-8(BOMなし)で作成します。
「Hello world!」
learngo01.go
package main
import (
"fmt"
// m "math"
// "net/http"
// "strconv"
)
func main() {
fmt.Println("Hello world!")
//beyondHello()
}
実行する前にgo fmtコマンドでフォーマットを整形するとよいでしょう。
フォーマットの整形
~$ go fmt learngo01.go
learngo01.go
go runコマンドで実行してみましょう。
ソースの実行
~$ go run learngo01.go
Hello world!
以降、learngo01.goにコードの差分を繰り返し「記述して実行」して行きますので、差分を残
したい場合は、ファイルをコピーした後、コピーしたファイルに追記して行って下さい。
ファイルのコピー
~$ cp learngo01.go learngo02.go
~$ ls
learngo01.go learngo02.go
以降、便宜上、追加していく差分の内容を「learngo連番.go」で表示してあります。
また、資料の性質上、資料のソースをそのまま「記述して実行」するとエラーになりますの
で、その際は、
● 各関数の呼び出しがコメントアウトされているので有効にする。
● import句のパッケージ定義がコメントアウトされているので有効にする。
などを行って下さい。
「複数の引数や戻り値」
learngo02.go
func beyondHello() {
var x int
x = 3
y := 4
sum, prod := learnMultiple(x, y)
fmt.Println("sum:", sum, "prod:", prod)
// learnTypes()
}
func learnMultiple(x, y int) (sum, prod int) {
return x + y, x * y
}
「様々な型」
learngo03.go
func learnTypes() {
s := "Learn Go!"
s2 := `A "raw" string literal
can include line breaks.`
g := 'Σ'
f := 3.14195
c := 3 + 4i
var u uint = 7
var pi float32 = 22. / 7
n := byte('n')
var a4 [4]int
a3 := [...]int{3, 1, 5}
s3 := []int{4, 5, 9}
s4 := make([]int, 4)
var d2 [][]float64
bs := []byte("a slice")
// p, q := learnMemory()
// fmt.Println(*p, *q)
m := map[string]int{"three": 3, "four": 4}
m["one"] = 1
_, _, _, _, _, _, _, _, _ = s2, g, f, u, pi, n, a3, s4, bs
fmt.Println(s, c, a4, s3, d2, m)
// learnFlowControl()
}
「メモリー割り当て」
learngo04.go
func learnMemory() (p, q *int) {
p = new(int)
s := make([]int, 20)
s[3] = 7
r := -2
return &s[3], &r
}
「フロー制御」
learngo05.go
func expensiveComputation() float64 {
return m.Exp(10)
}
func learnFlowControl() {
if true {
fmt.Println("told ya")
}
if false {
// Pout.
} else {
// Gloat.
}
x := 42.0
switch x {
case 0:
case 1:
case 42:
case 43:
}
for x := 0; x < 3; x++ {
fmt.Println("iteration", x)
}
for {
break
continue
}
if y := expensiveComputation(); y > x {
x = y
}
xBig := func() bool {
return x > 10000
}
fmt.Println("xBig:", xBig())
x = 1.3e3
fmt.Println("xBig:", xBig())
goto love
love:
// learnDefer()
// learnInterfaces()
}
「遅延実行」
learngo06.go
func learnDefer() (ok bool) {
defer fmt.Println("deferred statements execute in reverse (LIFO) order.")
defer fmt.Println("nThis line is being printed first because")
return true
}
「インターフェース」と「構造体」
learngo07.go
type Stringer interface {
String() string
}
type pair struct {
x, y int
}
func (p pair) String() string {
return fmt.Sprintf("(%d, %d)", p.x, p.y)
}
func learnInterfaces() {
p := pair{3, 4}
fmt.Println(p.String())
var i Stringer
i = p
fmt.Println(i.String())
fmt.Println(p)
fmt.Println(i)
// learnVariadicParams("great", "learning", "here!")
}
「可変引数」
learngo08.go
func learnVariadicParams(myStrings ...interface{}) {
for _, param := range myStrings {
fmt.Println("param:", param)
}
fmt.Println("params:", fmt.Sprintln(myStrings...))
// learnErrorHandling()
}
「エラーハンドリング」
learngo09.go
func learnErrorHandling() {
m := map[int]string{3: "three", 4: "four"}
if x, ok := m[1]; !ok {
fmt.Println("no one there")
} else {
fmt.Print(x)
}
if _, err := strconv.Atoi("non-int"); err != nil {
fmt.Println(err)
}
// learnConcurrency()
}
「同時実行処理」
learngo10.go
func inc(i int, c chan int) {
c <- i + 1
}
func learnConcurrency() {
c := make(chan int)
go inc(0, c)
go inc(10, c)
go inc(-805, c)
fmt.Println(<-c, <-c, <-c)
cs := make(chan string)
ccs := make(chan chan string)
go func() { c <- 84 }()
go func() { cs <- "wordy" }()
select {
case i := <-c:
fmt.Printf("it's a %T", i)
case <-cs:
fmt.Println("it's a string")
case <-ccs:
fmt.Println("didn't happen.")
}
// learnWebProgramming()
}
「Webアプリケーション」
learngo11.go
func learnWebProgramming() {
err := http.ListenAndServe(":8080", pair{})
fmt.Println(err)
}
func (p pair) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("You learned Go in Y minutes!"))
}

More Related Content

What's hot (18)

叠辞辞蝉迟础蝉颈辞で可読性を求めるのは间违っているだろうか
叠辞辞蝉迟础蝉颈辞で可読性を求めるのは间违っているだろうか叠辞辞蝉迟础蝉颈辞で可読性を求めるのは间违っているだろうか
叠辞辞蝉迟础蝉颈辞で可読性を求めるのは间违っているだろうか
Yuki Miyatake
?
apg4b 4.05 ポインタ
apg4b 4.05 ポインタapg4b 4.05 ポインタ
apg4b 4.05 ポインタ
APG4b
?
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Relations Team
?
Mock and patch
Mock and patchMock and patch
Mock and patch
Toru Furukawa
?
蹿辞谤文
蹿辞谤文蹿辞谤文
蹿辞谤文
APG4b
?
コルーチンの使い方
コルーチンの使い方コルーチンの使い方
コルーチンの使い方
Naohiro Yoshikawa
?
飞丑颈濒别文
飞丑颈濒别文飞丑颈濒别文
飞丑颈濒别文
APG4b
?
组み込みでこそ颁++を使う10の理由
组み込みでこそ颁++を使う10の理由组み込みでこそ颁++を使う10の理由
组み込みでこそ颁++を使う10の理由
kikairoya
?
笔贬笔5.5新机能「ジェネレータ」初心者入门
笔贬笔5.5新机能「ジェネレータ」初心者入门笔贬笔5.5新机能「ジェネレータ」初心者入门
笔贬笔5.5新机能「ジェネレータ」初心者入门
kwatch
?
プログラムの実行顺序
プログラムの実行顺序プログラムの実行顺序
プログラムの実行顺序
APG4b
?
Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半
Joe_noh
?
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式
digitalghost
?
入力
入力入力
入力
APG4b
?
规格书で読む颁++11のスレッド
规格书で読む颁++11のスレッド规格书で読む颁++11のスレッド
规格书で読む颁++11のスレッド
Kohsuke Yuasa
?
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -
Joe_noh
?
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
nekko1119
?
贵#と颁#で见る関数志向プログラミング
贵#と颁#で见る関数志向プログラミング贵#と颁#で见る関数志向プログラミング
贵#と颁#で见る関数志向プログラミング
satoshimurakumo
?
Elixirだ 第2回
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回
Joe_noh
?
叠辞辞蝉迟础蝉颈辞で可読性を求めるのは间违っているだろうか
叠辞辞蝉迟础蝉颈辞で可読性を求めるのは间违っているだろうか叠辞辞蝉迟础蝉颈辞で可読性を求めるのは间违っているだろうか
叠辞辞蝉迟础蝉颈辞で可読性を求めるのは间违っているだろうか
Yuki Miyatake
?
apg4b 4.05 ポインタ
apg4b 4.05 ポインタapg4b 4.05 ポインタ
apg4b 4.05 ポインタ
APG4b
?
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Relations Team
?
蹿辞谤文
蹿辞谤文蹿辞谤文
蹿辞谤文
APG4b
?
飞丑颈濒别文
飞丑颈濒别文飞丑颈濒别文
飞丑颈濒别文
APG4b
?
组み込みでこそ颁++を使う10の理由
组み込みでこそ颁++を使う10の理由组み込みでこそ颁++を使う10の理由
组み込みでこそ颁++を使う10の理由
kikairoya
?
笔贬笔5.5新机能「ジェネレータ」初心者入门
笔贬笔5.5新机能「ジェネレータ」初心者入门笔贬笔5.5新机能「ジェネレータ」初心者入门
笔贬笔5.5新机能「ジェネレータ」初心者入门
kwatch
?
プログラムの実行顺序
プログラムの実行顺序プログラムの実行顺序
プログラムの実行顺序
APG4b
?
Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半
Joe_noh
?
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式
digitalghost
?
规格书で読む颁++11のスレッド
规格书で読む颁++11のスレッド规格书で読む颁++11のスレッド
规格书で読む颁++11のスレッド
Kohsuke Yuasa
?
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -
Joe_noh
?
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
nekko1119
?
贵#と颁#で见る関数志向プログラミング
贵#と颁#で见る関数志向プログラミング贵#と颁#で见る関数志向プログラミング
贵#と颁#で见る関数志向プログラミング
satoshimurakumo
?
Elixirだ 第2回
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回
Joe_noh
?

Viewers also liked (19)

セミナー 起业20130407
セミナー 起业20130407セミナー 起业20130407
セミナー 起业20130407
Yoichi Inoue
?
Lampiran
LampiranLampiran
Lampiran
Juliana Pohan
?
LA ONE KITCHEN menu
LA ONE KITCHEN menuLA ONE KITCHEN menu
LA ONE KITCHEN menu
Wen Li Chang
?
18 silabus x-sim-dig
18 silabus x-sim-dig18 silabus x-sim-dig
18 silabus x-sim-dig
Al Agso
?
εφηβοι παχυσαρκια
εφηβοι παχυσαρκιαεφηβοι παχυσαρκια
εφηβοι παχυσαρκια
amitsikaris
?
у истоков Ниж Поволжья.pdf
у истоков Ниж Поволжья.pdfу истоков Ниж Поволжья.pdf
у истоков Ниж Поволжья.pdf
Natalya Solomina
?
Inklusi-Eksklusi
Inklusi-EksklusiInklusi-Eksklusi
Inklusi-Eksklusi
Yayan Setiawan
?
Innovation in manufacturing as an evolutionary complex system
Innovation in manufacturing as an evolutionary complex systemInnovation in manufacturing as an evolutionary complex system
Innovation in manufacturing as an evolutionary complex system
Ian McCarthy
?
H?y bi?n ??c m? c?a b?n thành tri?u ?? v?i Internet
H?y bi?n ??c m? c?a b?n thành tri?u ?? v?i InternetH?y bi?n ??c m? c?a b?n thành tri?u ?? v?i Internet
H?y bi?n ??c m? c?a b?n thành tri?u ?? v?i Internet
?ình Tu?n Ph?m
?
1419379686
14193796861419379686
1419379686
findgooodjob
?
Rks sentra balok b
Rks sentra balok bRks sentra balok b
Rks sentra balok b
kreasi tk
?
Carbonio
CarbonioCarbonio
Carbonio
lausonfed
?
Rka
RkaRka
Rka
Hendra Sirait
?
Andzej[prezentacja]ok
Andzej[prezentacja]okAndzej[prezentacja]ok
Andzej[prezentacja]ok
Room1809
?
Aanchal digest january 2011 www.aiourdubooks.net
Aanchal digest january 2011 www.aiourdubooks.netAanchal digest january 2011 www.aiourdubooks.net
Aanchal digest january 2011 www.aiourdubooks.net
Imran Ahmed Farooq
?
Capitale - Enciclopedia Einaudi [1982]
Capitale - Enciclopedia Einaudi [1982]Capitale - Enciclopedia Einaudi [1982]
Capitale - Enciclopedia Einaudi [1982]
sabbioso
?
Great Places to Work
Great Places to WorkGreat Places to Work
Great Places to Work
Kalpana PM
?
セミナー 起业20130407
セミナー 起业20130407セミナー 起业20130407
セミナー 起业20130407
Yoichi Inoue
?
18 silabus x-sim-dig
18 silabus x-sim-dig18 silabus x-sim-dig
18 silabus x-sim-dig
Al Agso
?
εφηβοι παχυσαρκια
εφηβοι παχυσαρκιαεφηβοι παχυσαρκια
εφηβοι παχυσαρκια
amitsikaris
?
у истоков Ниж Поволжья.pdf
у истоков Ниж Поволжья.pdfу истоков Ниж Поволжья.pdf
у истоков Ниж Поволжья.pdf
Natalya Solomina
?
Innovation in manufacturing as an evolutionary complex system
Innovation in manufacturing as an evolutionary complex systemInnovation in manufacturing as an evolutionary complex system
Innovation in manufacturing as an evolutionary complex system
Ian McCarthy
?
H?y bi?n ??c m? c?a b?n thành tri?u ?? v?i Internet
H?y bi?n ??c m? c?a b?n thành tri?u ?? v?i InternetH?y bi?n ??c m? c?a b?n thành tri?u ?? v?i Internet
H?y bi?n ??c m? c?a b?n thành tri?u ?? v?i Internet
?ình Tu?n Ph?m
?
Rks sentra balok b
Rks sentra balok bRks sentra balok b
Rks sentra balok b
kreasi tk
?
Andzej[prezentacja]ok
Andzej[prezentacja]okAndzej[prezentacja]ok
Andzej[prezentacja]ok
Room1809
?
Aanchal digest january 2011 www.aiourdubooks.net
Aanchal digest january 2011 www.aiourdubooks.netAanchal digest january 2011 www.aiourdubooks.net
Aanchal digest january 2011 www.aiourdubooks.net
Imran Ahmed Farooq
?
Capitale - Enciclopedia Einaudi [1982]
Capitale - Enciclopedia Einaudi [1982]Capitale - Enciclopedia Einaudi [1982]
Capitale - Enciclopedia Einaudi [1982]
sabbioso
?
Great Places to Work
Great Places to WorkGreat Places to Work
Great Places to Work
Kalpana PM
?

Similar to 骋辞の文法の実例と解説 (20)

Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
Akira Takahashi
?
笔测迟丑辞苍で始める顿谤辞辫产辞虫础笔滨
笔测迟丑辞苍で始める顿谤辞辫产辞虫础笔滨笔测迟丑辞苍で始める顿谤辞辫产辞虫础笔滨
笔测迟丑辞苍で始める顿谤辞辫产辞虫础笔滨
Daisuke Igarashi
?
厂肠补濒补の限定継続の応用と基本(改訂版)
厂肠补濒补の限定継続の応用と基本(改訂版)厂肠补濒补の限定継続の応用と基本(改訂版)
厂肠补濒补の限定継続の応用と基本(改訂版)
Kota Mizushima
?
闯补惫补厂肠谤颈辫迟入门
闯补惫补厂肠谤颈辫迟入门闯补惫补厂肠谤颈辫迟入门
闯补惫补厂肠谤颈辫迟入门
Ryo Maruyama
?
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
bleis tift
?
大人のお型付け
大人のお型付け大人のお型付け
大人のお型付け
Nobuhisa Koizumi
?
明日から使える気になる骋辞言语による并行処理
明日から使える気になる骋辞言语による并行処理明日から使える気になる骋辞言语による并行処理
明日から使える気になる骋辞言语による并行処理
Yuto Matsukubo
?
Flow.js
Flow.jsFlow.js
Flow.js
uupaa
?
骋辞をカンストさせる话
骋辞をカンストさせる话骋辞をカンストさせる话
骋辞をカンストさせる话
Moriyoshi Koizumi
?
蝉别迟罢颈尘别辞耻迟関数の楽しみ
蝉别迟罢颈尘别辞耻迟関数の楽しみ蝉别迟罢颈尘别辞耻迟関数の楽しみ
蝉别迟罢颈尘别辞耻迟関数の楽しみ
mtkn
?
辫别肠濒-础翱笔の绍介
辫别肠濒-础翱笔の绍介辫别肠濒-础翱笔の绍介
辫别肠濒-础翱笔の绍介
Hiraku Nakano
?
翱厂颁京都2011
翱厂颁京都2011翱厂颁京都2011
翱厂颁京都2011
haganemetal
?
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
Akira Inoue
?
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
yoshiaki iwanaga
?
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
Akira Takahashi
?
笔测迟丑辞苍で始める顿谤辞辫产辞虫础笔滨
笔测迟丑辞苍で始める顿谤辞辫产辞虫础笔滨笔测迟丑辞苍で始める顿谤辞辫产辞虫础笔滨
笔测迟丑辞苍で始める顿谤辞辫产辞虫础笔滨
Daisuke Igarashi
?
厂肠补濒补の限定継続の応用と基本(改訂版)
厂肠补濒补の限定継続の応用と基本(改訂版)厂肠补濒补の限定継続の応用と基本(改訂版)
厂肠补濒补の限定継続の応用と基本(改訂版)
Kota Mizushima
?
闯补惫补厂肠谤颈辫迟入门
闯补惫补厂肠谤颈辫迟入门闯补惫补厂肠谤颈辫迟入门
闯补惫补厂肠谤颈辫迟入门
Ryo Maruyama
?
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
bleis tift
?
明日から使える気になる骋辞言语による并行処理
明日から使える気になる骋辞言语による并行処理明日から使える気になる骋辞言语による并行処理
明日から使える気になる骋辞言语による并行処理
Yuto Matsukubo
?
Flow.js
Flow.jsFlow.js
Flow.js
uupaa
?
骋辞をカンストさせる话
骋辞をカンストさせる话骋辞をカンストさせる话
骋辞をカンストさせる话
Moriyoshi Koizumi
?
蝉别迟罢颈尘别辞耻迟関数の楽しみ
蝉别迟罢颈尘别辞耻迟関数の楽しみ蝉别迟罢颈尘别辞耻迟関数の楽しみ
蝉别迟罢颈尘别辞耻迟関数の楽しみ
mtkn
?
辫别肠濒-础翱笔の绍介
辫别肠濒-础翱笔の绍介辫别肠濒-础翱笔の绍介
辫别肠濒-础翱笔の绍介
Hiraku Nakano
?
翱厂颁京都2011
翱厂颁京都2011翱厂颁京都2011
翱厂颁京都2011
haganemetal
?
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
Akira Inoue
?
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
yoshiaki iwanaga
?

More from Ryuji Iwata (20)

開発?インフラ?コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート
開発?インフラ?コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート開発?インフラ?コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート
開発?インフラ?コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート
Ryuji Iwata
?
私のMicrosoft Azure 2023
私のMicrosoft Azure 2023私のMicrosoft Azure 2023
私のMicrosoft Azure 2023
Ryuji Iwata
?
私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと
私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと
私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと
Ryuji Iwata
?
Azure App ServiceのGo紹介 [2022年12月版]
Azure App ServiceのGo紹介 [2022年12月版]Azure App ServiceのGo紹介 [2022年12月版]
Azure App ServiceのGo紹介 [2022年12月版]
Ryuji Iwata
?
Dapr new building block: Distributed lock
Dapr new building block: Distributed lockDapr new building block: Distributed lock
Dapr new building block: Distributed lock
Ryuji Iwata
?
オープンセミナー冈山2022殿の13人
オープンセミナー冈山2022殿の13人オープンセミナー冈山2022殿の13人
オープンセミナー冈山2022殿の13人
Ryuji Iwata
?
FaaSなAzure FunctionsのGo紹介
FaaSなAzure FunctionsのGo紹介FaaSなAzure FunctionsのGo紹介
FaaSなAzure FunctionsのGo紹介
Ryuji Iwata
?
私の趣味罢别肠丑と滨颁罢コミュニティ
私の趣味罢别肠丑と滨颁罢コミュニティ私の趣味罢别肠丑と滨颁罢コミュニティ
私の趣味罢别肠丑と滨颁罢コミュニティ
Ryuji Iwata
?
骋辞ールを再确认しよう!
骋辞ールを再确认しよう!骋辞ールを再确认しよう!
骋辞ールを再确认しよう!
Ryuji Iwata
?
Microsoft/Azure x Goのご紹介
Microsoft/Azure x Goのご紹介Microsoft/Azure x Goのご紹介
Microsoft/Azure x Goのご紹介
Ryuji Iwata
?
技术を学ぶその前にあったもの
技术を学ぶその前にあったもの技术を学ぶその前にあったもの
技术を学ぶその前にあったもの
Ryuji Iwata
?
DaprのGo紹介 [機能紹介編]
DaprのGo紹介 [機能紹介編]DaprのGo紹介 [機能紹介編]
DaprのGo紹介 [機能紹介編]
Ryuji Iwata
?
私の趣味罢别肠丑活动报告
私の趣味罢别肠丑活动报告私の趣味罢别肠丑活动报告
私の趣味罢别肠丑活动报告
Ryuji Iwata
?
骋辞について
骋辞について骋辞について
骋辞について
Ryuji Iwata
?
Go入門ハンズオン [基礎編]
Go入門ハンズオン [基礎編]Go入門ハンズオン [基礎編]
Go入門ハンズオン [基礎編]
Ryuji Iwata
?
卒业骋辞は何してた?
卒业骋辞は何してた?卒业骋辞は何してた?
卒业骋辞は何してた?
Ryuji Iwata
?
受験の予约は余裕を持って
受験の予约は余裕を持って受験の予约は余裕を持って
受験の予约は余裕を持って
Ryuji Iwata
?
骋辞で础锄耻谤别の搁顿叠惭厂サービスを操作
骋辞で础锄耻谤别の搁顿叠惭厂サービスを操作骋辞で础锄耻谤别の搁顿叠惭厂サービスを操作
骋辞で础锄耻谤别の搁顿叠惭厂サービスを操作
Ryuji Iwata
?
骋辞でイケる!础锄耻谤别サービスの绍介
骋辞でイケる!础锄耻谤别サービスの绍介骋辞でイケる!础锄耻谤别サービスの绍介
骋辞でイケる!础锄耻谤别サービスの绍介
Ryuji Iwata
?
「Gopher道場 #8」で知り得たこと
「Gopher道場 #8」で知り得たこと「Gopher道場 #8」で知り得たこと
「Gopher道場 #8」で知り得たこと
Ryuji Iwata
?
開発?インフラ?コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート
開発?インフラ?コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート開発?インフラ?コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート
開発?インフラ?コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート
Ryuji Iwata
?
私のMicrosoft Azure 2023
私のMicrosoft Azure 2023私のMicrosoft Azure 2023
私のMicrosoft Azure 2023
Ryuji Iwata
?
私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと
私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと
私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと
Ryuji Iwata
?
Azure App ServiceのGo紹介 [2022年12月版]
Azure App ServiceのGo紹介 [2022年12月版]Azure App ServiceのGo紹介 [2022年12月版]
Azure App ServiceのGo紹介 [2022年12月版]
Ryuji Iwata
?
Dapr new building block: Distributed lock
Dapr new building block: Distributed lockDapr new building block: Distributed lock
Dapr new building block: Distributed lock
Ryuji Iwata
?
オープンセミナー冈山2022殿の13人
オープンセミナー冈山2022殿の13人オープンセミナー冈山2022殿の13人
オープンセミナー冈山2022殿の13人
Ryuji Iwata
?
FaaSなAzure FunctionsのGo紹介
FaaSなAzure FunctionsのGo紹介FaaSなAzure FunctionsのGo紹介
FaaSなAzure FunctionsのGo紹介
Ryuji Iwata
?
私の趣味罢别肠丑と滨颁罢コミュニティ
私の趣味罢别肠丑と滨颁罢コミュニティ私の趣味罢别肠丑と滨颁罢コミュニティ
私の趣味罢别肠丑と滨颁罢コミュニティ
Ryuji Iwata
?
骋辞ールを再确认しよう!
骋辞ールを再确认しよう!骋辞ールを再确认しよう!
骋辞ールを再确认しよう!
Ryuji Iwata
?
Microsoft/Azure x Goのご紹介
Microsoft/Azure x Goのご紹介Microsoft/Azure x Goのご紹介
Microsoft/Azure x Goのご紹介
Ryuji Iwata
?
技术を学ぶその前にあったもの
技术を学ぶその前にあったもの技术を学ぶその前にあったもの
技术を学ぶその前にあったもの
Ryuji Iwata
?
DaprのGo紹介 [機能紹介編]
DaprのGo紹介 [機能紹介編]DaprのGo紹介 [機能紹介編]
DaprのGo紹介 [機能紹介編]
Ryuji Iwata
?
私の趣味罢别肠丑活动报告
私の趣味罢别肠丑活动报告私の趣味罢别肠丑活动报告
私の趣味罢别肠丑活动报告
Ryuji Iwata
?
Go入門ハンズオン [基礎編]
Go入門ハンズオン [基礎編]Go入門ハンズオン [基礎編]
Go入門ハンズオン [基礎編]
Ryuji Iwata
?
卒业骋辞は何してた?
卒业骋辞は何してた?卒业骋辞は何してた?
卒业骋辞は何してた?
Ryuji Iwata
?
受験の予约は余裕を持って
受験の予约は余裕を持って受験の予约は余裕を持って
受験の予约は余裕を持って
Ryuji Iwata
?
骋辞で础锄耻谤别の搁顿叠惭厂サービスを操作
骋辞で础锄耻谤别の搁顿叠惭厂サービスを操作骋辞で础锄耻谤别の搁顿叠惭厂サービスを操作
骋辞で础锄耻谤别の搁顿叠惭厂サービスを操作
Ryuji Iwata
?
骋辞でイケる!础锄耻谤别サービスの绍介
骋辞でイケる!础锄耻谤别サービスの绍介骋辞でイケる!础锄耻谤别サービスの绍介
骋辞でイケる!础锄耻谤别サービスの绍介
Ryuji Iwata
?
「Gopher道場 #8」で知り得たこと
「Gopher道場 #8」で知り得たこと「Gopher道場 #8」で知り得たこと
「Gopher道場 #8」で知り得たこと
Ryuji Iwata
?

骋辞の文法の実例と解説

  • 1. 骋辞の文法の実例と解説 オリジナルサイト Learn X in Y minutes http://learnxinyminutes.com/docs/go/ オリジナルソース learngo.go http://learnxinyminutes.com/docs/files/learngo.go ブロック分け 全体で約20のセクションで構成されており、順番に処理を呼び出す記述になっています。 少々長いので、いくつかのブロックに分けて「記述して実行」して行きます。 セクション一覧(ブロックは「記述して実行」する単位) 「Hello world!」 package main import () func main() 「複数の引数や戻り値」 func beyondHello() func learnMultiple(x, y int) (sum, prod int) 「様々な型」 func learnTypes() 「メモリー割り当て」 func learnMemory() (p, q *int) 「フロー制御」 func expensiveComputation() float64 func learnFlowControl() 「遅延実行」 func learnDefer() (ok bool) 「インターフェース」と「構造体」 type Stringer interface type pair struct
  • 2. func (p pair) String() string func learnInterfaces() 「可変引数」 func learnVariadicParams(myStrings ...interface{}) 「エラーハンドリング」 func learnErrorHandling() 「同時実行処理」 func inc(i int, c chan int) func learnConcurrency() 「Webアプリケーション」 func learnWebProgramming() func (p pair) ServeHTTP(w http.ResponseWriter, r *http.Request) 実際にやってみよう! テキストエディターでlearngo01.goをUTF-8(BOMなし)で作成します。 「Hello world!」 learngo01.go package main import ( "fmt" // m "math" // "net/http" // "strconv" ) func main() { fmt.Println("Hello world!") //beyondHello() } 実行する前にgo fmtコマンドでフォーマットを整形するとよいでしょう。 フォーマットの整形 ~$ go fmt learngo01.go learngo01.go
  • 3. go runコマンドで実行してみましょう。 ソースの実行 ~$ go run learngo01.go Hello world! 以降、learngo01.goにコードの差分を繰り返し「記述して実行」して行きますので、差分を残 したい場合は、ファイルをコピーした後、コピーしたファイルに追記して行って下さい。 ファイルのコピー ~$ cp learngo01.go learngo02.go ~$ ls learngo01.go learngo02.go 以降、便宜上、追加していく差分の内容を「learngo連番.go」で表示してあります。 また、資料の性質上、資料のソースをそのまま「記述して実行」するとエラーになりますの で、その際は、 ● 各関数の呼び出しがコメントアウトされているので有効にする。 ● import句のパッケージ定義がコメントアウトされているので有効にする。 などを行って下さい。 「複数の引数や戻り値」 learngo02.go func beyondHello() { var x int x = 3 y := 4 sum, prod := learnMultiple(x, y) fmt.Println("sum:", sum, "prod:", prod) // learnTypes() } func learnMultiple(x, y int) (sum, prod int) { return x + y, x * y } 「様々な型」
  • 4. learngo03.go func learnTypes() { s := "Learn Go!" s2 := `A "raw" string literal can include line breaks.` g := 'Σ' f := 3.14195 c := 3 + 4i var u uint = 7 var pi float32 = 22. / 7 n := byte('n') var a4 [4]int a3 := [...]int{3, 1, 5} s3 := []int{4, 5, 9} s4 := make([]int, 4) var d2 [][]float64 bs := []byte("a slice") // p, q := learnMemory() // fmt.Println(*p, *q) m := map[string]int{"three": 3, "four": 4} m["one"] = 1 _, _, _, _, _, _, _, _, _ = s2, g, f, u, pi, n, a3, s4, bs fmt.Println(s, c, a4, s3, d2, m) // learnFlowControl() } 「メモリー割り当て」 learngo04.go func learnMemory() (p, q *int) { p = new(int) s := make([]int, 20) s[3] = 7 r := -2 return &s[3], &r }
  • 5. 「フロー制御」 learngo05.go func expensiveComputation() float64 { return m.Exp(10) } func learnFlowControl() { if true { fmt.Println("told ya") } if false { // Pout. } else { // Gloat. } x := 42.0 switch x { case 0: case 1: case 42: case 43: } for x := 0; x < 3; x++ { fmt.Println("iteration", x) } for { break continue } if y := expensiveComputation(); y > x { x = y } xBig := func() bool { return x > 10000 } fmt.Println("xBig:", xBig()) x = 1.3e3 fmt.Println("xBig:", xBig()) goto love love:
  • 6. // learnDefer() // learnInterfaces() } 「遅延実行」 learngo06.go func learnDefer() (ok bool) { defer fmt.Println("deferred statements execute in reverse (LIFO) order.") defer fmt.Println("nThis line is being printed first because") return true } 「インターフェース」と「構造体」 learngo07.go type Stringer interface { String() string } type pair struct { x, y int } func (p pair) String() string { return fmt.Sprintf("(%d, %d)", p.x, p.y) } func learnInterfaces() { p := pair{3, 4} fmt.Println(p.String()) var i Stringer i = p fmt.Println(i.String()) fmt.Println(p) fmt.Println(i) // learnVariadicParams("great", "learning", "here!") } 「可変引数」
  • 7. learngo08.go func learnVariadicParams(myStrings ...interface{}) { for _, param := range myStrings { fmt.Println("param:", param) } fmt.Println("params:", fmt.Sprintln(myStrings...)) // learnErrorHandling() } 「エラーハンドリング」 learngo09.go func learnErrorHandling() { m := map[int]string{3: "three", 4: "four"} if x, ok := m[1]; !ok { fmt.Println("no one there") } else { fmt.Print(x) } if _, err := strconv.Atoi("non-int"); err != nil { fmt.Println(err) } // learnConcurrency() } 「同時実行処理」 learngo10.go func inc(i int, c chan int) { c <- i + 1 } func learnConcurrency() { c := make(chan int) go inc(0, c) go inc(10, c) go inc(-805, c) fmt.Println(<-c, <-c, <-c) cs := make(chan string)
  • 8. ccs := make(chan chan string) go func() { c <- 84 }() go func() { cs <- "wordy" }() select { case i := <-c: fmt.Printf("it's a %T", i) case <-cs: fmt.Println("it's a string") case <-ccs: fmt.Println("didn't happen.") } // learnWebProgramming() } 「Webアプリケーション」 learngo11.go func learnWebProgramming() { err := http.ListenAndServe(":8080", pair{}) fmt.Println(err) } func (p pair) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Write([]byte("You learned Go in Y minutes!")) }