自由気ままにブログ

地方零細企業プログラマがひっそりとなにかしています。

Goでの、二次元配列代入で躓いたところ(暗黙的代入)

f:id:nono138:20200421225921p:plain

こんにちは、こんばんは、138nonoです。

業務に辺り、多次元配列をよく使う場面があると思います。
二次元配列とは、簡単に言うと、配列の中に配列を格納するような機能です。

一連の処理が終わった後、配列を元の配列に代入し初期値に戻そうと思ったのですが、上手く値が戻せないと悩んでいました。

二次元配列の中身を確認したところ、配列がコピーされていました。

package main

import (
    "fmt"
)

func main() {
    var test1 int
    var testA int

    test1 = append(test1, 3)
    test1 = append(test1, 4)
    testA = append(testA, 5)
    testA = append(testA, 6)
    test := [...][]int{
        test1,
        testA,
    }

    fmt.Println(test)
    test[0] = test[1]
    fmt.Println(test)
    test[1][0] = 1
    fmt.Println(test)

}


簡単なコードで、go playgroundで確認したところ次のような結果が得られました。

配列代入結果
test1配列にtestAを代入後、test1に1を代入するだけの処理ですが、暗黙的にtestAにtest1の結果がコピーされています。

分かりやすく書くと
x = 1; y = 2; xとyの初期化
x = y   この時点でxは2になっています
x = 3 xに3を直接代入
(y = x) 暗黙的にyにxが代入されている

goでの仕様なのか、配列は元々、そう言うものなのかは不明なので、分かる方がいれば是非、ご教授頂きたいです。

また、goでの仕様で配列は定数化出来ない(constは配列では使用不可)ので、初期値に戻すには、また直接、yに2を代入するしか、思いつきませんでした。
良い方法がまだまだ、あると思いますので、まだまだ自分の未熟さを痛感する今日この頃です。