我基于Golang net.IP
类型创建了自定义类型。让我感到惊讶的是,用指针接收器声明的方法对我的自定义类型不能修改接收器指向的值。
调用u
后,此代码段中的nil
变量仍为u.defaultIP()
。如果我将自定义类型更改为具有IP字段的结构,并且使用指向结构的指针接收器定义方法,则可以修改IP。我错过了什么?可以找到可执行示例here。
type userIP net.IP
func main() {
var u *userIP
u.defaultIP()
fmt.Printf("%v\n", u)
}
func (u *userIP) defaultIP() {
defaultIP := userIP("127.0.0.1")
u = &defaultIP
}
答案 0 :(得分:5)
在设置值之前,您需要取消引用u
。
从您的示例中,更改
defaultIP := userIP("127.0.0.1")
u = &defaultIP
到
*u = userIP("127.0.0.1")
为您的示例更新并正常工作:https://play.golang.org/p/ycCLT0ed9F