如何在 Go 中为接口分配指针

package main


import "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?


阿晨1998
浏览 146回答 2
2回答

UYOU

您将其分配给指向接口的指针。将字段类型更改为接口后,它将起作用:type foo struct {    bar intr}很少需要指向接口的指针。

紫衣仙女

Uber-go 风格指南 pointers-to-interfaces包含对您问题的准确答案,您几乎不需要指向接口的指针。您应该将接口作为值传递——底层数据仍然可以是一个指针。一个接口有两个字段: 一个指向某些类型特定信息的指针。您可以将其视为“类型”。和一个数据指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储一个指向该值的指针。如果希望接口方法修改底层数据,则必须使用指针。我的建议是尽快熟悉它,希望能帮助到你
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go