LoginSignup
0
0

More than 3 years have passed since last update.

A Tour of Go メモ【2】1日目

Last updated at Posted at 2020-09-12

A Tour of Go
時折、コードを変更したり、関連記事を調べたりしながら、学習しました。

for

func main() {
    sum := 0
    for i :=0; i < 10; i++ {
        sum += i
        fmt.Println(i)
        fmt.Println(sum)
    }
}

#省略可能
for ; sum < 100; {
    sum += sum
}

#さらに省略可能
for sum < 100 {
    sum += 100
}

# 無限ループ
for {

}

if

func judge(x int) string {
    if x > 0 {
        return "マイナス"
    }
    return fmt.Println("プラス")
}
func main() {
    fmt.Println(judge(−100))
}
>> "マイナス"

#注意 returnどちらか一つ
if文内の returnに到達したら、
if文外の return の戻り値は返ってこない

条件の前に変数を定義できる

条件の前に定義した変数はifのスコープ内のみ使用可能
もちろん、elseブロッック内でも使用可能

func pow(x, n, lim float64) float64 {
    if v := math.pow(x, n); v < lim {
        return v
    } else {
        return v+10
    }
    return lim
}

func main() {
    fmt.Println(
        pow(3, 2, 10)
        pow(3, 3, 20)
    )
}
>> 9
>> 127


#スコープ外で使うとエラー

if v := 10: v < 100 {
  return "100以下"
}
fmt.Println(v)
>> undefined: v

Switch

breakはいらない
caseの条件が一致すれば、自動的にbreakする

runtime.GOOSで実行しているOSを判定できる

func main() {
    fmt.Printl("Go runs on")
    switch os := runtime.GOOS; os {
    case "darwin":
        fmt.Println("OS x.")
    case "linux":
        fmt.Println("Linux.")
    default:
       fmt.Printf("%s.\n", os)
    }
}

switch {
    t := time.now()
    case t.Hour() < 12:
        fmt.Println("Good morning")
    case t.Hour() < 17:
        fmt.Println("Good afternoon")
    default:
        fmt.Println("Good evening")
}

Defer

呼び出し元の関数が終わるまで、deferに渡した関数の実行を遅らせる
deferに渡した関数の引数はすぐに評価される
Go言語のdeferを正しく理解する | How defer in Golang works

func main() {
        world := "world"
        defer fmt.Println(world)
        world = "new world"
        fmt.Println("hello")
}

> hello
# deferにより、main()関数が終わった後に実行される
# しかし、worldはすぐに評価されるので、deferの後に"new world" と変更しても、反映されない
> world
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0