gpt4 book ai didi

function - 带接口(interface)的函数可以作为参数传递吗?

转载 作者:行者123 更新时间:2023-12-01 22:45:26 27 4
gpt4 key购买 nike

我知道函数可以作为参数传递。但我想使用一个函数,该函数采用实现接口(interface)的类型作为函数的输入。这还有可能吗?

我尝试了以下方法,它给出了 cannot use myfn1 (type func(int)) as type fn in argument to test作为错误。

package main

import "fmt"

type intf interface{}

type fn func(i intf)

func myfn1(i int) {
fmt.Printf("\ni is %v", i)
}
func myfn2(i int) {
fmt.Printf("\ni is %v", i)
}
func test(f fn, val int) {
f(val)
}
func main() {

test(fn(myfn1), 123)
test(myfn2, 321)
}

你可以试试: https://play.golang.org/p/Al7USxzmYST

更改 type fn func(i intf)type fn func(i int)当然可以解决问题。但我不明白它是否可以与界面一起使用。

最佳答案

您可以将任何类型的函数作为参数传递。但是,当您将函数作为参数传递时,函数签名必须匹配。因此,您不能传递采用接口(interface)的函数来代替采用 int 的函数。

将接口(interface)值传递给函数与传递 int 不同。当您调用具有 int 值的函数时,它只是传递该值。但是,当您将 int 值传递给获取 interface{} 的函数时,它必须创建一个包含值类型和值本身的接口(interface)值,然后将其传递。

关于function - 带接口(interface)的函数可以作为参数传递吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60956494/

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