为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
月关宝盒 2022-06-13 17:29:32
我有这个自定义函数类型 MyFuncType,它接受 MyStruct 类型的单个参数:type MyStruct struct {  SomeVar string}type MyFuncType func(MyStruct)var fn MyFuncTypefn = func(ms MyStruct) {//...}然后我想我可以改变 MyFuncType 的定义来传递额外的参数:type MyFuncType func(MyStruct, ...interface{})var fn MyFuncTypefn = func(ms MyStruct, suffix string, anythigIWant int) {//...}现在编译器抱怨 fn 的类型不兼容。好的,我想我可以理解可变数量的参数不能定义函数签名......但即使有下面的定义:type MyFuncType func(MyStruct, interface{})这是同一首歌。最后,无法将 interface{} 用作自定义函数类型中的参数的 [any]type 还是我在这里遗漏了什么?我的解决方法是将 MyFuncType 类型的函数的实现附加到提供额外所需数据的结构中。
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

您的问题是 func 签名,您需要完全按照 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


查看完整回答
反对 回复 2022-06-13
  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信