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

golang中的隐式接口转换

golang中的隐式接口转换

Go
米琪卡哇伊 2021-10-25 17:19:43
这是我想展示的想法的一个例子。package mainimport "fmt"// interface declaration//type A interface {    AAA() string}type B interface{    Get() A}// implementation//type CA struct {}// implementation of A.AAAfunc (ca *CA) AAA() string {    return "it's CA"}type C struct {}// implementation of B.Get, except for returning a 'struct' instead of an 'interface'func (c *C) Get() *CA {    return &CA{}}func main() {    var c interface{} = &C{}    d := c.(B)    fmt.Println(d.Get().AAA())    fmt.Println("Hello, playground")}在这个例子中接口B有一个Get返回接口的方法AstructC有一个成员函数Get返回一个指向 struct 的指针CA,它实现了接口A结果是 Go 无法B从 struct推导出接口C,即使它们的Get方法只是返回类型不同,这是可转换的。我提出这个问题的原因是当接口A、B和struct C、CA在不同的包中时,我只能:将 Get 方法细化C为func Get() A,这会在包之间引入一些依赖关系。将GetinterfaceB和 struct 的方法都细化C为func Get() interface{}我想避免包之间的依赖并尽量不依赖interface{},谁能给我一些提示?Go 的最佳实践是什么?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 225 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信