Go语言中的函数

举报
jackwangcumt 发表于 2021/10/23 08:14:09 2021/10/23
【摘要】 函数对于众多的编程语言来说,都是至关重要的。有一种观点,认为数据结构比算法重要,因为数据结构往往决定了它的功能。换句话说,结构决定功能。在Go语言中,为什么函数具备可重复调用,且可根据传入参数,经过一定的逻辑处理后返回结果呢?本质上这是由函数的基本结构决定的。

      函数对于众多的编程语言来说,都是至关重要的。有一种观点,认为数据结构比算法重要,因为数据结构往往决定了它的功能。换句话说,结构决定功能。在Go语言中,为什么函数具备可重复调用,且可根据传入参数,经过一定的逻辑处理后返回结果呢?本质上这是由函数的基本结构决定的。

1 Go函数基本结构


   Go语言的函数基本定义语法:

func 函数名( [参数列表] ) [函数返回值类型] {
   函数体
}

Go语言的函数是由如下几个部分构成的:
关键字func
       在Go语言中,任何一个函数的定义,必须用关键字func打头进行声明,func是函数英文名function的简写,这样可以更快地进行编码。关键字func和函数名之间必须用空格隔开。
函数名
       函数名不能用数字或者$、#等特殊字符打头,函数名首字母的大小写决定该函数的包外可见性。首字母大写的函数在包外可见,而首字母小写的函数在包含不可见。Go语言中建议用驼峰法对函数名进行命名,比如getName()而不是get_name()。函数名可以不指定(为空),这种函数称为匿名函数。函数名作为函数的标识符,可以用来对函数进行引用。
参数列表
       函数可以看作是具备输入和输出接口的黑盒。那么函数的参数列表就是函数的输入。Go语言是强类型语言,每个函数的参数列表必须要给定形参的名称以及形参的类型。函数定义中给出的形参列表信息就限定了函数调用的时候,可以传入的实参个数、顺序以及类型,不匹配的话会出现错误。参数列表可以为空,可以是一个或者多个值。不同的参数之间用英文逗号隔开。形参只是一个占位符,当函数在调用时,我们将实际的值传递给函数的形参,这个实际的值被称为实参。
返回值类型
       函数的作用就是对输入进行逻辑处理,并返回结果,从而实现代码的复用。Go语言的函数在定义的时候,如果有返回值,那么需要指定返回值的类型。如果不指定,则表示函数不返回任何值。Go语言中函数返回值可以是函数。另外,如果函数返回声明中不但给了返回值类型,还给出了返回值的别名,如func sum(a, b int) (c int),那么变量c在函数内部可以直接进行使用,无需再次声明,并且函数最后可以用return进行结束,函数会自动返回c的值,即相当于return c。
函数体
      函数体是函数定义中,在符号{ }之间的代码块。Go语言中,函数的第一个左括号{必须和函数名在一行,不能另起一行。函数体中可以用return关键字进行返回值。函数体中可以调用其他函数,也可以重新定义函数。
下面给出一个Go语言函数的示例,如代码所示。

package main
import "fmt"
func sum(a int, b int) int {
    return a + b
}
func main() {
    c := sum(2, 3)
    fmt.Printf("sum(2, 3)=%d \n", c)
}

       代码中,03行首先用func关键字声明了一个名为sum的函数,这个sum函数有两个参数,分别是a和b,其类型都是int。sum函数返回值类型也是int。04行是sum函数的函数体,用return返回形参a和b的和。07行用短变量定义的方式定义了一个变量c,其值为调用函数sum的返回值。此时,实参2和3会被传递到函数sum的形参a和b中,因此返回值为2+3=5。由于Go语言是一门编译型的语言,因此函数编写的顺序是无关紧要的,例如代码3-1中的函数sum可以放于main函数之前,也可以放于之后,顺序不影响调用结果。

      注意:Go语言中不支持函数的重载,另外同一个包中,不允许定义同名的函数,即使它们的参数不一样。内置的init函数除外。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。