为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
阿晨1998 2022-06-01 17:33:28
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 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

您将其分配给指向接口的指针。将字段类型更改为接口后,它将起作用:


type foo struct {

    bar intr

}

很少需要指向接口的指针。


查看完整回答
反对 回复 2022-06-01
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

Uber-go 风格指南 pointers-to-interfaces包含对您问题的准确答案,

您几乎不需要指向接口的指针。您应该将接口作为值传递——底层数据仍然可以是一个指针。一个接口有两个字段: 一个指向某些类型特定信息的指针。您可以将其视为“类型”。和一个数据指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储一个指向该值的指针。如果希望接口方法修改底层数据,则必须使用指针。

我的建议是尽快熟悉它,

希望能帮助到你


查看完整回答
反对 回复 2022-06-01
  • 2 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号