package mainimport "fmt"type intr interface { String() string}type bar struct{}func (b *bar) String() string { return "bar"}type foo struct { bar *intr}func main() { bar1 := bar{} foo1 := foo{bar: &bar1} fmt.Println(foo1)}我得到一个编译时错误:不能在字段值中使用 &bar1 (type *bar) 作为 *intr 类型:*intr 是指向接口的指针,而不是接口为什么会发生这个错误?如何分配foo.bar?
2 回答

紫衣仙女
TA贡献1839条经验 获得超15个赞
Uber-go 风格指南 pointers-to-interfaces包含对您问题的准确答案,
您几乎不需要指向接口的指针。您应该将接口作为值传递——底层数据仍然可以是一个指针。一个接口有两个字段: 一个指向某些类型特定信息的指针。您可以将其视为“类型”。和一个数据指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储一个指向该值的指针。如果希望接口方法修改底层数据,则必须使用指针。
我的建议是尽快熟悉它,
希望能帮助到你
- 2 回答
- 0 关注
- 145 浏览
添加回答
举报
0/150
提交
取消