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

我有这个自定义函数类型 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]type 还是我在这里遗漏了什么?


我的解决方法是将 MyFuncType 类型的函数的实现附加到提供额外所需数据的结构中。


月关宝盒
浏览 130回答 1
1回答

ABOUTYOU

您的问题是 func 签名,您需要完全按照 func 中的方式定义它type,然后您可以使用它发送您想要的任何内容:type MyFuncType func(MyStruct, ...interface{})var fn MyFuncTypefn = 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go