gpt4 book ai didi

pointers - 如何使用接口(interface){}将整数作为指针传递给函数

转载 作者:IT王子 更新时间:2023-10-29 01:35:42 24 4
gpt4 key购买 nike

我以为这是一件简单的事情,但我错了。我无法使用 interface{}integer 作为指向函数的指针传递。

例子:

var test int
someChange(&test)
fmt.Printf("after function: %d", test)

func someChange(i interface{}) error{
newFunnyValue := 42
i = newFunnyValue
fmt.Printf("hello from someChange now value test is: %d" , i)
return nil //change gone ok, so nil
}

结果:

 hello from someChange now value test is: 42 
after function: 0

我读到 interface{}void* 类似,所以上面的代码应该可以工作,但事实并非如此,为什么?我想补充一点,如果我传递一些结构对象,一切都会正常。

我是否必须将 int 包装在某个结构中?

编辑:

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

最佳答案

如果你想观察someChange()函数之外的变化(在test变量中),你必须修改pointed值(为其分配一个新值)。您并没有这样做,您只是为 i 参数(它是 someChange() 中的局部变量)分配了一个新值。

您可以使用type assertioni 接口(interface)变量获取*int 指针| , 然后您可以为指向的值分配一个新值。

例子:

func someChange(i interface{}) error {
newFunnyValue := 42
if p, ok := i.(*int); ok {
*p = newFunnyValue
return nil //change gone ok, so nil
}
return errors.New("Not *int")
}

测试它:

var test int
someChange(&test)
log.Printf("after function: %d", test)

输出(在 Go Playground 上尝试):

2009/11/10 23:00:00 after function: 42

请注意,将 int 值或 *int 指针包装在结构中是不必要的,如果您不分配新值,这不会有什么不同指向对象。

关于pointers - 如何使用接口(interface){}将整数作为指针传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41371060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com