Go言語で配列の中身を操作する関数を書いてみた。
C言語では配列変数はアドレスだから、Go言語でもたぶん同じだろうと思いプログラムを書いてみたのだが、上手くいかない。 :^(
■bad_chgarr.go
package main import "fmt" func chg_array(data [10]int) { for i := 0; i < len(data); i++ { data[i] = i } fmt.Println(data) } func main() { var data [10]int chg_array(data) fmt.Println(data) }
(実行結果)
$ go run bad_chgarr.go [0 1 2 3 4 5 6 7 8 9] [0 0 0 0 0 0 0 0 0 0]
解決策
どうやら、Go言語では配列を関数に渡すと、参照渡しではなく値渡しされるみたいです。
Go言語の内部仕様がどうなってるのかは不明ですが、配列変数のアドレスを渡してやりました。
■good_chgarr.go
package main import "fmt" func chg_array(data *[10]int) { for i := 0; i < len(data); i++ { data[i] = i } fmt.Println(*data) } func main() { var data [10]int chg_array(&data) fmt.Println(data) }
(実行結果)
$ go run good_chgarr.go [0 1 2 3 4 5 6 7 8 9] [0 1 2 3 4 5 6 7 8 9]
よし、成功。