2016-12-26 5 views
0

構造体ではない型を持つ場合、ポインタ受信機で値を変更するにはどうすればよいですか?例えば、following code非構造体の値をポインタ受信機で変更する

を与えられた:

package main 

import (
    "fmt" 
) 

type MyInt int 

func (i *MyInt) Change() { 
    newValue := MyInt(32) 
    i = &newValue 
} 

func main() { 
    myInt := MyInt(64) 
    fmt.Println(myInt) 
    myInt.Change() 
    fmt.Println(myInt) 
} 

それは出力:

64 
64 

は、なぜそれが、出力は以下ません。

64 
32 

答えて

3

あなたはポインタi、ないポインタが指しているのの値を変更しています。あなたは* operatorを使用して、期待される出力が表示されます

*i = newValue 

https://play.golang.org/p/mKsKC0lsj9

+0

です。私の混乱は、「* i」が「i」のアドレスに**値を取得する方法であり、したがって値を設定するために使用できないと考えることによって引き起こされました。なぜ私はそれを考えたのか分かりません。ありがとう。 – HenryTK

0

あなたの関数のための定義:

func (i *MyInt) Change() { 
    newValue := MyInt(32) 
    i = &newValue 
} 

をこの関数を呼び出すとき:

myInt := MyInt(64) 
myInt.Change() 

myIntの値はiに渡されるため、func (i *MyInt) Change()の呼び出し後にはiではなく、myIntとなります。

関連する問題