小编use*_*346的帖子

嵌入式接口

我还是Go的新手,我很惊讶无法使用嵌入式接口的子类型.这是一个小例子来解释我的意思:

func test(sl bufio.ReadWriter){
    // cannot use sl(type bufio.ReadWriter) as type bufio.Reader in function argument
    readStuff(sl) 
    [...]
    writeStuff(sl) // same kind of error
}

func readStuff(sl bufio.Reader){
    [...]
}
Run Code Online (Sandbox Code Playgroud)

由于每个接口都具有相同的内存布局,而ReadWriter是Reader和Writer,因此我希望此代码能够正常工作.我确实尝试将接口类型转换为:

readStuff(sl.(buffio.Reader))
Run Code Online (Sandbox Code Playgroud)

但它也不起作用.所以我有两个问题:

  • 为什么不起作用?
  • 那个问题的哲学是什么?

go

9
推荐指数
2
解决办法
630
查看次数

标签 统计

go ×1