gpt4 book ai didi

戈朗 : how is "func() interface {}" and "func() *MyStruct" incompatible types?

转载 作者:IT王子 更新时间:2023-10-29 01:18:31 24 4
gpt4 key购买 nike

假设我有一段代码,其中一个函数接受另一个函数作为参数:

type Person struct {
Name string
}

func personBuilder() * Person {
return &Person{Name: "John"}
}

func printRetrievedItem(callback func() interface {}){
fmt.Print(callback());
}

func doStuff(){
printRetrievedItem(personBuilder);
}

这导致错误 cannot use personBuilder (type func() *Person) as type func() interface {} in function argument。如果我将 personBuilder 返回类型更改为 interface{},它会起作用,但在我正在处理的实际项目中,我希望有一个具体类型以实现清晰的设计和 TDD 目的.

Go 支持这样的方法签名泛化吗?如果您无法更改 personBuilder 部分(例如,您有很多返回不同类型结构的无参数函数,并且您想构建一个接受任何这些构建器的消费者函数,那么有什么解决方法参数)?

最佳答案

一种解决方法是定义一个调用 personBuilder 的内联函数。

printRetrievedItem(func() interface{} {return personBuilder()});

Playground

关于戈朗 : how is "func() interface {}" and "func() *MyStruct" incompatible types?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31406892/

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