自定义函数类型可以是可变的吗?
Can a custom function type be variadic?
我有这个自定义函数类型 MyFuncType,它接受一个 MyStruct 类型的参数:
type MyStruct struct {
SomeVar string
}
type MyFuncType func(MyStruct)
var fn MyFuncType
fn = func(ms MyStruct) {//...}
然后我想我可以更改 MyFuncType 的定义以传递额外的参数:
type MyFuncType func(MyStruct, ...interface{})
var fn MyFuncType
fn = func(ms MyStruct, suffix string, anythigIWant int) {//...}
现在编译器抱怨 fn 的类型不兼容。好的,我想我可以理解可变数量的参数不能定义函数签名......
但即使有以下定义:
type MyFuncType func(MyStruct, interface{})
这是同一首歌。
最后,无法将 interface{} 用作自定义函数类型中参数的 [any] 类型,或者我在这里遗漏了什么?
我的解决方法是将 MyFuncType 类型的函数的实现附加到提供额外所需数据的结构。
你的问题是 func 签名,你需要按照 type
中的方式定义它,然后你就可以使用它发送你想要的任何东西:
type MyFuncType func(MyStruct, ...interface{})
var fn MyFuncType
fn = func(ms MyStruct, args...interface{}) {
fmt.Println(ms.SomeVar, args[0], args[1])
}
// Using it as if the signature was:
// func(ms MyStruct, suffix string, anythigIWant int)
fn(MyStruct{SomeVar: "some var"}, "suffix", 123)
我有这个自定义函数类型 MyFuncType,它接受一个 MyStruct 类型的参数:
type MyStruct struct {
SomeVar string
}
type MyFuncType func(MyStruct)
var fn MyFuncType
fn = func(ms MyStruct) {//...}
然后我想我可以更改 MyFuncType 的定义以传递额外的参数:
type MyFuncType func(MyStruct, ...interface{})
var fn MyFuncType
fn = func(ms MyStruct, suffix string, anythigIWant int) {//...}
现在编译器抱怨 fn 的类型不兼容。好的,我想我可以理解可变数量的参数不能定义函数签名...... 但即使有以下定义:
type MyFuncType func(MyStruct, interface{})
这是同一首歌。 最后,无法将 interface{} 用作自定义函数类型中参数的 [any] 类型,或者我在这里遗漏了什么?
我的解决方法是将 MyFuncType 类型的函数的实现附加到提供额外所需数据的结构。
你的问题是 func 签名,你需要按照 type
中的方式定义它,然后你就可以使用它发送你想要的任何东西:
type MyFuncType func(MyStruct, ...interface{})
var fn MyFuncType
fn = func(ms MyStruct, args...interface{}) {
fmt.Println(ms.SomeVar, args[0], args[1])
}
// Using it as if the signature was:
// func(ms MyStruct, suffix string, anythigIWant int)
fn(MyStruct{SomeVar: "some var"}, "suffix", 123)