我有一个自定义函数类型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类型的函数的实现附加到提供其他所需数据的结构上。
答案 0 :(得分:3)
您的问题是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)