繁体   English   中英

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

[英]Changing the value of a non-struct with a pointer receiver

如果我的类型不是结构体,如何使用指针接收器更改其值?

例如,给出以下代码

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

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

您将使用*运算符查看您的预期输出:

*i = newValue

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

为您的功能定义:

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

当您调用此函数时:

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

myInt的值将传递给i ,因此在调用func (i *MyInt) Change() ,您只修改i ,而不修改myInt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM