Golangで、関数にstring配列を渡した時に、&や*を使っていないのに、渡した先の関数での変更が呼び出し元にも反映されてしまいます。
単なる値渡しにするにはどうすれば良いでしょうか?
Go
1package main 2 3import ( 4 "fmt" 5 "strings" 6) 7 8func main() { 9 arr := strings.Split("aaa bbb ccc", " ") 10 for _, s := range arr { 11 fmt.Println(s) 12 } 13 a(arr) // 関数の実行前後で結果が変わってしまいます 14 for _, s := range arr { 15 fmt.Println(s) 16 } 17} 18 19func a(str []string) { 20 for i := 0; i < len(str); i++ { 21 str[i] = "'" + str[i] + "'" 22 } 23}
「渡した先の関数での変更が呼び出し元にも反映」という現象は、質問のプログラムの、どの部分(どの値)で発生するのですか?
何が起こるのかを具体的に説明して頂かないと状況が判りません。
回答2件
あなたの回答
tips
プレビュー