使用指针接收器更改非结构的值

时间:2016-12-26 19:00:07

标签: go

如果我有一个不是结构的类型,我如何用指针接收器改变它的值?

例如,给定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

2 个答案:

答案 0 :(得分:3)

您正在更改指针 i的值,而不是指针所指向的

您将使用* operator

查看预期输出
*i = newValue

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

答案 1 :(得分:0)

为您的函数定义:

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

当你调用这个函数时:

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

myInt的值将传递给i,因此在致电func (i *MyInt) Change()后,您只需修改i,而不是myInt