gpt4 book ai didi

go - 将 "func returning pointer to struct"分配给 "func returning pointer to interface"类型的 var

转载 作者:行者123 更新时间:2023-12-01 22:34:42 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





cannot use function (type func()) as type in argument

(1 个回答)


2年前关闭。




我有两个函数返回指向符契约(Contract)一接口(interface)的两个单独结构的指针。如何将功能放在同一张 map 中?我想出了创建包装函数(示例中为 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)
}

最佳答案

How can I put the functions in the same map?



你不能,它们有不同的类型。

I came up with creating wrapper functions (getFooer in the example) to make the types check. Is there a better way?



基本上:不。您可以修改例如的签名获取 getA() Fooer但这需要返回到 *A 的类型断言如果你需要一个 A。

What are the rules that make types check for the type conversion in the getFooer function, but not for the type conversion in the commented out line in main?



死简单:一个函数 getA() *A大写 func() *A而且这种类型不同于 func() Fooer (无协方差)。 Functin 类型必须在字面上匹配。您可以返回 *A作为 Fooer因为您可以分配 *AFooer 类型的变量. getA 产生 *A这个 *A赋值给返回值 getFooer这是一个 Fooer .

关于go - 将 "func returning pointer to struct"分配给 "func returning pointer to interface"类型的 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60411321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com