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条)

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码