带指针的golang动态参数

问题描述 投票:0回答:2

我在golang中有以下代码:

package main

import (
    "fmt"
)

func test(data interface{}){
data="test"
}

func main() {
    t :="org"
    test(&t)
    fmt.Println(t)
}

我试图添加指向* interface {}的指针,但是会引发错误,当我打印t时如何分配字符串” test”?现在t将被打印为“ org”

谢谢!!

pointers go interface
2个回答
1
投票

我认为您期望interface的魔力比实际要大得多。

考虑此程序的变体:

package main

import (
    "fmt"
)

func test(p *string) {
    s := "test"
    p = &s
}

func main() {
    t := "org"
    test(&t)
    fmt.Println(t)
}

您希望它打印出test吗?如果是这样,我们有一个更大的问题。 :-)如果没有,为什么直接分配给p interface{}时为什么期望t的版本会更改p

如果我们将test更改为通过 *p

func test(p *string) {
    *p = "test"
}

程序does按预期打印test

[现在剩下的就是处理将p声明为data interface{}时的情况。与bserdar's answer中一样,您必须首先从*string中的接口对象中提取基础data指针。然后,您可以使用该指针设置main的变量t。您可以通过两个步骤完成此操作:

func test(data interface{}) {
    p := data.(*string)
    *p = "test"
}

例如,或者您可以一行完成全部操作。


0
投票

您正在设置接口,而不是基础值。相反,您应该这样做

func test(data interface{}){
  *data.(*string) = "aaa"
}

即,首先获取基础的字符串指针,然后设置其指向的字符串。

© www.soinside.com 2019 - 2024. All rights reserved.