処理フロー(if, for, switch, defer)
Goの基本的な制御構文(if, for, switch, for)について動作確認します。
if
package main
import (
"fmt"
"time"
)
func main() {
i := 5
if i > 0 {
fmt.Println("xxx")
}
if t := time.Now(); t.Hour() < 14 {
// 変数tのスコープはifの終わりまで
fmt.Println("Hour: ", t.Hour())
}
}
xxx
Hour: 12
for
基本
package main
import "fmt"
func main() {
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
fmt.Println(sum)
}
45
whileのように利用
package main
import "fmt"
func main() {
sum := 1
for sum < 20 {
sum += sum
fmt.Println(sum)
}
fmt.Println(sum)
}
2
4
8
16
32
32
range|配列, スライス
package main
import "fmt"
func main() {
s := []string{"aaa", "bbb", "ccc"}
for i, v := range s {
fmt.Printf("index: %d value: %v\n", i, v)
}
}
index: 0 value: aaa
index: 1 value: bbb
index: 2 value: ccc
range|map
package main
import "fmt"
func main() {
m := map[string]int{
"aaa": 100,
"bbb": 200,
"ccc": 300,
}
for k, v := range m {
fmt.Printf("key: %v value: %v\n", k, v)
}
}
key: aaa value: 100
key: bbb value: 200
key: ccc value: 300
range|文字列
package main
import "fmt"
func main() {
s := "わくわくBank"
for i, v := range s {
fmt.Printf("%T i:%v v:%v\n", v, i, v)
}
}
int32 i:0 v:12431
int32 i:3 v:12367
int32 i:6 v:12431
int32 i:9 v:12367
int32 i:12 v:66
int32 i:13 v:97
int32 i:14 v:110
int32 i:15 v:107
switch
利用例1
break
は不要です。
package main
import (
"fmt"
)
func main() {
s := "bbb"
switch s {
case "aaa":
fmt.Println("case aaa")
case "bbb":
fmt.Println("case bbb")
default:
fmt.Println("case default")
}
}
case bbb
利用例2
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Println(runtime.NumCPU())
switch {
case runtime.NumCPU() < 8:
fmt.Println("case runtime.NumCPU() < 8")
case runtime.NumCPU() < 16:
fmt.Println("case runtime.NumCPU() < 16")
case runtime.NumCPU() < 32:
fmt.Println("case runtime.NumCPU() < 32")
case runtime.NumCPU() < 32:
fmt.Println("case runtime.NumCPU() < 64")
default:
fmt.Println("case default")
}
}
16
case runtime.NumCPU() < 32
利用例3
package main
import (
"fmt"
)
func main() {
var i interface{} = "hello"
switch v := i.(type) {
case int:
fmt.Printf("%v is int[%T]\n", v, v)
case string:
fmt.Printf("%v is string[%T]\n", v, v)
default:
fmt.Printf("default: %v[%T]\n", v, v)
}
}
hello is string[string]
defer
deferで指定した処理は、関数の処理が終わったあとに実行されます。
package main
import "fmt"
func main() {
defer fmt.Println("world1")
defer fmt.Println("world2")
fmt.Println("hello")
}
hello
world2
world1