16. 基本的な文法 その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))
}
17. 基本的な文法 その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)
}
}
18. 基本的な文法 その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}
}
}
19. 基本的な文法 その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)
}
}
20. 基本的な文法 その6
package main
import "fmt"
type Student struct { ← typeで型を宣言
no string type 名前 実体
name string
}
func main() {
s := &Student{"041701", "Takuya Ueda"}
fmt.Println(s)
}
21. 基本的な文法 その6
package main
import "fmt"
type Student struct {
no string
name string
}
func main() {
s := &Student{"041701", "Takuya Ueda"}
fmt.Println(s) ↑
} 構造体の初期化
&でポインタ
22. 基本的な文法 その7
package main
import "fmt"
type Hex int ← 組込み型のエイリアス
func (h Hex) String() {
return fmt.Sprintf("%x")
}
func main() {
fmt.Println(Hex(100))
}
23. 基本的な文法 その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))
}
24. 基本的な文法 その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))
}
25. 基本的な文法 その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と出力される
33. Concurrency is not Parallelism
● ConcurrencyとParallelismは違う by Rob Pike
○ Concurrency=並行?
○ Parallelism=並列?
■ たぶん
● Concurrency
○ 同時にいくつかの事を扱う事
● Parallelism
○ 同時にいくつかの計算を行なう事
34. 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.
とある。
40. これは大丈夫?
// これはダメ!! // 続き
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
} だめ!!
}()
// 続く