如何在go中设置指针值?

如何在go中设置指针值?,go,Go,是否可以通过指针q将ms设置为具有新值MyStruct{2}?我得到了这个错误,q类型接口{}你不能使用接口{}类型,因为它不是一个文本类型,你可以像你正在尝试的那样存储地址。接口类型描述一般行为,而不是特定值 如果直接使用MyStruct类型,则可以获取指针并执行所需操作 包干管 进口fmt func doStuffq*MyStruct{ *q=MyStruct{2} } 类型MyStruct struct{ f1整数 } func main{ ms:=MyStruct{1} 多斯塔夫和ms

是否可以通过指针q将ms设置为具有新值MyStruct{2}?我得到了这个错误,q类型接口{}

你不能使用接口{}类型,因为它不是一个文本类型,你可以像你正在尝试的那样存储地址。接口类型描述一般行为,而不是特定值

如果直接使用MyStruct类型,则可以获取指针并执行所需操作

包干管 进口fmt func doStuffq*MyStruct{ *q=MyStruct{2} } 类型MyStruct struct{ f1整数 } func main{ ms:=MyStruct{1} 多斯塔夫和ms fmt.PrintfHello,操场:%v\n,毫秒 } 不能使用接口{}类型,因为它不是文本类型,您可以像正在尝试的那样存储地址。接口类型描述一般行为,而不是特定值

如果直接使用MyStruct类型,则可以获取指针并执行所需操作

包干管 进口fmt func doStuffq*MyStruct{ *q=MyStruct{2} } 类型MyStruct struct{ f1整数 } func main{ ms:=MyStruct{1} 多斯塔夫和ms fmt.PrintfHello,操场:%v\n,毫秒 } 接口{}不是指针类型。因此,您不能更改它的基本值。 相反,如果确实需要,可以修改q值并从doStuff函数返回它

例如:

包干管 进口fmt func doStuffq接口{}接口{}{ q=&MyStruct{2} 返回q } 类型MyStruct struct{ f1整数 } func main{ var ms接口{}=MyStruct{1} ms=多斯塔夫和多斯塔夫 fmt.PrintfHello,操场:%v\n,毫秒 } 接口{}不是指针类型。因此,您不能更改它的基本值。 相反,如果确实需要,可以修改q值并从doStuff函数返回它

例如:

包干管 进口fmt func doStuffq接口{}接口{}{ q=&MyStruct{2} 返回q } 类型MyStruct struct{ f1整数 } func main{ var ms接口{}=MyStruct{1} ms=多斯塔夫和多斯塔夫 fmt.PrintfHello,操场:%v\n,毫秒 }
这是可能的,但您需要使用or。类型接口{}不是指针类型,因此不能对其使用指针间接寻址。您的问题似乎暗示您将接口{}视为任何类型。这是错误的。接口{}不是任何类型,它是空接口,字面上是接口{},是一种独特的固定类型,如uint16、chan bool、[]string或io.Reader。为了熟悉围棋的类型系统,再次进行围棋之旅是值得的。这是可能的,但你需要使用or。类型接口{}不是指针类型,因此不能对其使用指针间接寻址。您的问题似乎暗示您将接口{}视为任何类型。这是错误的。接口{}不是任何类型,它是空接口,字面上是接口{},是一种独特的固定类型,如uint16、chan bool、[]string或io.Reader。为了熟悉围棋的类型系统,再次进行围棋之旅是值得的。
package main

import "fmt"

func doStuff(q interface{}) {
    *q = MyStruct{2}
}

type MyStruct struct {
    f1 int
}

func main() {
    ms := MyStruct{1}
    doStuff(&ms)
    fmt.Printf("Hello, playground: %v\n", ms)
}