自定义函数类型可以是可变的吗?

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)

查看:https://play.golang.org/p/R_qZoul9AcV