LoginSignup
7
7

More than 5 years have passed since last update.

golang勉強メモ:変数宣言の省略形式と組み合わせ代入

Posted at

変数宣言の省略形式では、変数のどれか一つが新しい変数でなければならない。すべてが新しい変数である必要はない。この点はvarと異なる。

func main() {
    a, b := 1, 2
    println(a, b)
    // a, b := 1, 2
    //  => `no new variables on left side of :=`となる
    // var a, b, c int = 3, 4, 5
    // => `a redeclared in this block` となる
    a, b, c := 2, 3, 4
    println(a, b, c)
}

この例では、既存のa,bは単に代入となる。
ブロックの中ではスコープが異なるので別の変数となる。

func main() {
    a, b := 1, 2
    println(a, b)
    {
        a, b, c := 3, 4, 5
        println(a, b, c)
    }
    println(a, b) // => 1, 2
}

関数の戻り値のパラメータに名前が付いていて、returnで戻り値を省略している場合に、戻り値のパラメータをスコープで隠してしまっていると、コンパイルエラーになってくれる。

func main() {
    println(f())
}

func f() (a int) {
    {
        a, b := 1, 2
        println(a, b)
        // return
        // => `a is shadowed during return`となる
        return a
    }
}

あと、goで意味のないサンプルコードを書くのは難しい。

7
7
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
7
7