たなしょのメモ

日々勉強していることをつらつらと

Go学習メモ2

本日のGo

案件も忙しくなってきたので睡眠不足の毎日。

switch文

Goのswitch文はbreakを使わなくても良い

switch os := runtime.GOOS; os {
    case "darwin":
        fmt.Println("0S X. ")
    case "linux":
        fmt.Println("Linux. ")
    default:
        fmt.Printf("%s.\n", os)
    }

case文の中で変数に条件を指定できるみたい。
それならif-else if-else文使おうよと思ってしまう。

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Now()
    switch {
    case t.Hour() < 12:
        fmt.Println("Good mornig!")
    case t.Hour() < 17:
        fmt.Println("Good afternoon.")
    default:
        fmt.Println("Good evening.")
    }
}

defer

初登場のステートメント
deferで渡した関数は元の関数の終わりまで(return)するまでは実行されないらしい。
よくわからないけど。

package main

import "fmt"

func main() {
    defer fmt.Println("world")

    fmt.Println("hello")
}

蒸気のサンプルの場合はPintln関数が返ってきたあと(helloが呼ばれる)にPrintln関数を実行している?(worldが呼ばれる)

package main

import "fmt"

func main() {
    fmt.Println("test")

    for i := 0; i < 11; i++ {
        defer fmt.Println(i)
    }

    fmt.Println("test2")
}

testとtest2が呼び出されたあと10から順に数字が出力される。
deferステートメントはstackでデータが格納されるらしい。

今日はここまで。明日は結構いっぱいかけそう。