Goでの、二次元配列代入で躓いたところ(暗黙的代入)
こんにちは、こんばんは、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を代入するしか、思いつきませんでした。
良い方法がまだまだ、あると思いますので、まだまだ自分の未熟さを痛感する今日この頃です。