dongtuo3370 2019-02-13 12:23
浏览 208
已采纳

如何在GO中获取指向接口的指针

I would like to get rid of the variable temp in the following code:

type myinterface interface {
    f1()
}

type a struct {
    val int
}

type b struct {
    mi *myinterface
}

func (a) f1() {

}

    func demo() {

        a1 := a{3}
        var temp myinterface = a1
        b1 := b{&temp}
        fmt.Println(b1)

But if I try to write

b1 := b{&myinterface(a1)}

I get the message

cannot take the address of myinterface(a1) ( undefined )

what is the correct way to do this?

Update:

I did not a pointer to an interface, since an interface can hold a struct or a pointer to a struct, as also detailed in this question:

"<type> is pointer to interface, not interface" confusion

  • 写回答

2条回答 默认 最新

  • duanlun2827 2019-02-13 12:30
    关注

    Let me know if this is what you are looking for: https://play.golang.org/p/ZGRyIqN7bPR

    Full code:

    package main
    
    import (
      "fmt"
    )
    
    type myinterface interface {
      f1()
    }
    
    type a struct {
      val int
    }
    
    type b struct {
      mi myinterface
    }
    
    func (a) f1() {}
    
    
    func main() {
      fmt.Println("Hello, playground")
    
      a1 := &a{3}
      b1 := b{a1}
      fmt.Println(b1)
    }
    

    You almost never need a pointer to an interface, since interfaces are just pointers themselves. So just change the struct b to:

     type b struct {
       mi myinterface
     }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何构建全国统一的物流管理平台?
  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥20 和学习数据的传参方式,选择正确的传参方式有关
  • ¥15 这是网络安全里面的poem code
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥30 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路