gpt4 book ai didi

go - 返回接口(interface)的函数

转载 作者:IT老高 更新时间:2023-10-28 13:09:06 25 4
gpt4 key购买 nike

为什么我可以说 CreateLion() 的结果,一个指向实现 Cat 接口(interface)的结构的指针,是 Cat 接口(interface)的一个实例,但我不能说 CreateLion() 是类型“函数返回 Cat 接口(interface)。”

实现这种行为的标准 Golang 方法是什么?

package main

import "fmt"

func main() {
var lion Cat := CreateLion()
lion.Meow()

// this line breaks. Why?
var cf CatFactory = CreateLion
}

type Cat interface {
Meow()
}

type Lion struct {}
func (l Lion) Meow() {
fmt.Println("Roar")
}

// define a functor that returns a Cat interface
type CatFactory func() Cat

// define a function that returns a pointer to a Lion struct
func CreateLion() *Lion {
return &Lion{}
}

最佳答案

试试这个:

package main

import "fmt"

type Cat interface {
Meow()
}

type Lion struct{}

func (l Lion) Meow() {
fmt.Println("Roar")
}

type CatFactory func() Cat

func CreateLion() Cat {
return Lion{}
}

func main() {
lion := CreateLion()
lion.Meow()

var cf CatFactory = CreateLion
fLion := cf()
fLion.Meow()
}

在大多数情况下,您可以将任何类型分配给基本类型interface{}。但是如果函数参数的类型是 map[T]interface{}[]interface{}func() interface{},情况就会发生变化>。在这种情况下,类型必须相同。

关于go - 返回接口(interface)的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35006640/

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