我有两个函数返回指向符合同一接口的两个单独结构的指针。如何将功能放在同一张地图中?我想出了创建包装函数(getFooer在示例中)来检查类型。有没有更好的办法?使类型检查getFooer函数中的类型转换但不检查注释掉行中的类型转换的规则是什么main?package mainimport ( "fmt")type Fooer interface { Foo()}type A struct {}func (a *A) Foo() {}var a A = A{}func getA() (*A) { return &a}func getFooer() (Fooer) { return getA()}func main() { var f func() (Fooer) // f = getA // /tmp/foo.go:29:7: cannot use getA (type func() *A) as type func() Fooer in assignment f = getFooer fmt.Println(f)}
1 回答
天涯尽头无女友
TA贡献1831条经验 获得超9个赞
如何将功能放在同一张地图中?
你不能,它们有不同的类型。
我想出了创建包装函数(示例中为 getFooer)来检查类型。有没有更好的办法?
基本上:不。您可以将例如 getA 的签名修改为,但如果您需要 A ,则getA() Fooer
需要类型断言。*A
使类型检查 getFooer 函数中的类型转换,但不检查 main 中注释掉的行中的类型转换的规则是什么?
死简单:一个函数getA() *A
hase类型func() *A
和这个类型不同func() Fooer
(没有协方差)。Functin 类型必须在字面上匹配。您可以将 a*A
作为 a返回,Fooer
因为您可以将 a 分配给*A
类型为 的变量Fooer
。getA 产生 a*A
并将其*A
分配给其返回值为getFooer
a Fooer
。
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报
0/150
提交
取消