将“func返回指向结构的指针”分配给“func返回指向接口的指针”类型的var

我有两个函数返回指向符合同一接口的两个单独结构的指针。如何将功能放在同一张地图中?我想出了创建包装函数(getFooer在示例中)来检查类型。有没有更好的办法?使类型检查getFooer函数中的类型转换但不检查注释掉行中的类型转换的规则是什么main?


package main


import (

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

}


一只名叫tom的猫
浏览 93回答 1
1回答

天涯尽头无女友

如何将功能放在同一张地图中?你不能,它们有不同的类型。我想出了创建包装函数(示例中为 getFooer)来检查类型。有没有更好的办法?基本上:不。您可以将例如 getA 的签名修改为,但如果您需要 A ,则getA() Fooer需要类型断言。*A使类型检查 getFooer 函数中的类型转换,但不检查 main 中注释掉的行中的类型转换的规则是什么?死简单:一个函数getA() *Ahase类型func() *A和这个类型不同func() Fooer(没有协方差)。Functin 类型必须在字面上匹配。您可以将 a*A作为 a返回,Fooer因为您可以将 a 分配给*A类型为 的变量Fooer。getA 产生 a*A并将其*A分配给其返回值为getFooera Fooer。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go