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 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧