以下のようにパッケージ内の値を返すメソッドを作成したのですが、スライスの値だけパッケージ外からでも元の値が上書きできてしまいます。
他の型同様、元のスライスの値を上書きされないようにする方法はありますでしょうか?また他にも今回のように上書きできてしまう型がありましたら教えて下さい。
宜しくお願いします。
Go
1package main 2 3import ( 4 "fmt" 5 "./hoge" 6) 7 8func main() { 9 // 元の値 10 a := hoge.Get() 11 fmt.Println("string: " + a.Str + " slice: " + a.Slice[0]) 12 13 // 値を変更 14 a.Str = "NG" 15 a.Slice[0] = "NG" 16 fmt.Println("string: " + a.Str + " slice: " + a.Slice[0]) 17 18 // スライスだけ値が上書きされている 19 fmt.Println("string: " + hoge.Get().Str + " slice: " + hoge.Get().Slice[0]) 20} 21 22 23package hoge 24 25var h = Hoge{Str: "OK", Slice: []string{"OK"}} 26 27type Hoge struct { 28 Str string 29 Slice []string 30} 31 32func Get() Hoge { 33 return h 34}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/21 22:38