Fork me on GitHub

Go语言开发-过程式编程-自定义函数

5.6. 自定义函数

函数是过程式编程的基石,Go语言为它们提供了一流的支持。Go语言中的方法与函数非常相似,因此本节既适用于过程式编程,也适用于面向对象的编程。

下面是函数定义的基本语法:

一个函数可以接受零个或多个参数。如果没有参数,则圆括号之间是空的,如果有一个或多个参数,则写法为参数1 类型1,……,参数N 类型N,其中参数1可以是单个参数,也可以是给定类型的以逗号分隔的两个或多个参数名。参数必须按照给定的顺序传入,与Python的参数是不一样的,但是稍后将使用不同的方式来达到类似的效果。

最后一个参数类型的前面可能会有省略号(…),这样的函数被称为可变参数函数;这意味着该函数将接受给定类型的零个或多个值作为该参数的值,并且在该函数中,参数的类型为[]type。

一个函数可以有零个或多个返回值,如果没有返回值,则函数的左大括号会紧跟着参数的右圆括号,如果只有一个未命名的返回值,其写法可以为只写一个类型符号,如果有两个或多个未命名的返回值,则必须使用圆括号,其写法为(类型1,……,类型N);如果有一个或多个命名返回值, 也必须使用括号,写法为(参数名1 类型1,……,参数名N 类型N),其中参数名1可以是单个返回值名称,也可以是给定类型的以逗号分隔的两个或多个返回值名称。函数的返回值要么全部是未命名的,要么全部是命名的,但不能两者兼而有之。

具有一个或多个返回值的函数必须至少有一个return语句,或者在函数结尾调用panic()。如果返回值是未命名的,则return语句必须指定与返回值个数相同的值,且每个值的类型都必须与返回值匹配。如果返回值是命名的,则return语句既可以像未命名返回值那样返回值,也可以仅仅是一个裸的return语句(即不显式的返回值)。请注意,尽管裸的return语句是合法的,但这样的代码风格是很糟糕的,这本书的例子都没有使用过这种语法。

如果函数具有一个或多个返回值,则其最后一个可执行语句必须是return语句,或是panic()。Go语言的编译器足够智能,可以意识到以panic()结尾的函数不会正常返回,所以这种情况下就不需要return语句。不幸的是,如果一个函数以if语句结尾且有一个无条件执行的以return语句结尾的else语句,或者是一个switch语句含有一个以return结尾的default语句块,这种情况不再需要额外的return语句,但当前Go语言编译器却不能理解。常见的做法是要么不以else或default结尾,将return语句放在if或switch语句之后,要么简单地将panic(“unreachable”)语句放在函数结尾,之前我们已演示过这种用法。


目录


作者:Johnson
原创文章,版权所有,转载请保留原文链接。

发表评论

电子邮件地址不会被公开。 必填项已用*标注