登录
首页 >  Golang >  Go问答

在 Golang 中使用类型别名定义函数

来源:stackoverflow

时间:2024-02-25 13:30:26 475浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《在 Golang 中使用类型别名定义函数》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

在 golang 中可以做这样的事情吗?

package main

import "fmt"

type myfuntype func(x int) int

var myfun myfuntype = myfuntype { return x }  // (1) 

func dosomething(f myfuntype) {
    fmt.println(f(10))
}

func main() {
    dosomething(myfun)
}

换句话说,是否可以使用函数类型别名来声明函数类型变量,而不需要重复签名? 或者,有没有办法在创建函数类型的变量时不总是重新输入整个函数签名

上面的代码示例,我希望与下面的代码示例等效(将 (1) 行替换为 (2) 行),导致编译错误 语法错误:意外返回,期望表达式

package main

import "fmt"

type myFunType func(x int) int 

var myFun myFunType = func(x int) int { return 2 * x } // (2)

func doSomething(f myFunType) {
    fmt.Println(f(10))
}

func main() {
    doSomething(myFun)
}

解决方案


来自Spec: Function literals:

函数文字必须包含 func 关键字和 Signature。语法不允许使用函数类型。

同样适用于 Function declarations:

不允许使用函数类型(而不是签名)。

所以不,你想要的东西是不可能的。其原因是因为签名(函数类型)不包含参数名称(仅包含它们的顺序和类型),但是当您实际“创建”函数值时,您需要一种引用它们的方法,并且只有函数类型,没有参数名称。

有关更多详细信息,请参阅相关问题:

Getting method parameter names in Golang

Is unnamed arguments a thing in Go?

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

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