登录
首页 >  Golang >  Go问答

函数类型是否可以是可变的?

来源:stackoverflow

时间:2024-02-16 13:57:23 482浏览 收藏

哈喽!今天心血来潮给大家带来了《函数类型是否可以是可变的?》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我有这个自定义函数类型 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

本篇关于《函数类型是否可以是可变的?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>