天天视讯!go语言调用函数方法是什么

时间:2022-12-01 19:56:35       来源:PHP中文网

本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

函数构成了代码执行的逻辑结构,在Go语言中,函数的基本组成为:关键字 func、函数名、参数列表、返回值、函数体和返回语句,每一个程序都包含很多的函数,函数是基本的代码块。


【资料图】

因为Go语言是编译型语言,所以函数编写的顺序是无关紧要的,鉴于可读性的需求,最好把 main() 函数写在文件的前面,其他函数按照一定逻辑顺序进行编写(例如函数被调用的顺序)。

编写多个函数的主要目的是将一个需要很多行代码的复杂问题分解为一系列简单的任务来解决,而且,同一个任务(函数)可以被多次调用,有助于代码重用(事实上,好的程序是非常注意 DRY 原则的,即不要重复你自己(Don"t Repeat Yourself),意思是执行特定任务的代码只能在程序里面出现一次)。

当函数执行到代码块最后一行} 之前或者 return 语句的时候会退出,其中 return 语句可以带有零个或多个参数,这些参数将作为返回值供调用者使用,简单的 return 语句也可以用来结束 for 的死循环,或者结束一个协程(goroutine)。

Go语言里面拥三种类型的函数:

普通的带有名字的函数匿名函数或者 lambda 函数方法

普通函数声明(定义)

函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。

func 函数名(形式参数列表)(返回值列表){    函数体}
登录后复制

形式参数列表描述了函数的参数名以及参数类型,这些参数作为局部变量,其值由参数调用者提供,返回值列表描述了函数返回值的变量名以及类型,如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。

调用函数

函数在定义后,可以通过调用的方式,让当前代码跳转到被调用的函数中进行执行,调用前的函数局部变量都会被保存起来不会丢失,被调用的函数运行结束后,恢复到调用函数的下一行继续执行代码,之前的局部变量也能继续访问。

函数内的局部变量只能在函数体中使用,函数调用结束后,这些局部变量都会被释放并且失效。

Go语言的函数调用格式如下:

返回值变量列表 := 函数名(参数列表)
登录后复制

下面是对各个部分的说明:

函数名:需要调用的函数名。参数列表:参数变量以逗号分隔,尾部无须以分号结尾。返回值变量列表:多个返回值使用逗号分隔。

例如,加法函数调用样式如下:

result := add(1,1)
登录后复制

函数的返回值

Go语言支持多返回值,多返回值能方便地获得函数执行后的多个返回参数,Go语言经常使用多返回值中的最后一个返回参数返回函数执行中可能发生的错误,示例代码如下:

复制纯文本复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
conn, err := connectToNetwork()
登录后复制
登录后复制

在这段代码中,connectToNetwork 返回两个参数,conn 表示连接对象,err 返回错误信息。

其它编程语言中函数的返回值

C/C++ 语言中只支持一个返回值,在需要返回多个数值时,则需要使用结构体返回结果,或者在参数中使用指针变量,然后在函数内部修改外部传入的变量值,实现返回计算结果,C++ 语言中为了安全性,建议在参数返回数据时使用“引用”替代指针。C# 语言也没有多返回值特性,C# 语言后期加入的 ref 和 out 关键字能够通过函数的调用参数获得函数体中修改的数据。lua 语言没有指针,但支持多返回值,在大块数据使用时方便很多。

Go语言既支持安全指针,也支持多返回值,因此在使用函数进行逻辑编写时更为方便。

1) 同一种类型返回值

如果返回值是同一种类型,则用括号将多个返回值类型括起来,用逗号分隔每个返回值的类型。使用 return 语句返回时,值列表的顺序需要与函数声明的返回值类型一致,示例代码如下:

复制纯文本复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
func typedTwoValues() (int, int) {    return 1, 2}func main() {    a, b := typedTwoValues()    fmt.Println(a, b)}
登录后复制
登录后复制

代码输出结果:

1 2
登录后复制

纯类型的返回值对于代码可读性不是很友好,特别是在同类型的返回值出现时,无法区分每个返回参数的意义。

2) 带有变量名的返回值

Go语言支持对返回值进行命名,这样返回值就和参数一样拥有参数变量名和类型。

命名的返回值变量的默认值为类型的默认值,即数值为 0,字符串为空字符串,布尔为 false、指针为 nil 等。下面代码中的函数拥有两个整型返回值,函数声明时将返回值命名为 a 和 b,因此可以在函数体中直接对函数返回值进行赋值,在命名的返回值方式的函数体中,在函数结束前需要显式地使用 return 语句进行返回,代码如下:

复制纯文本复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
func namedRetValues() (a, b int) {    a = 1    b = 2    return}
登录后复制
登录后复制

代码说明如下:

第 1 行,对两个整型返回值进行命名,分别为 a 和 b。第 3 行和第 4 行,命名返回值的变量与这个函数的布局变量的效果一致,可以对返回值进行赋值和值获取。第 6 行,当函数使用命名返回值时,可以在 return 中不填写返回值列表,如果填写也是可行的,下面代码的执行效果和上面代码的效果一样。
复制纯文本复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
func namedRetValues() (a, b int) {    a = 1    return a, 2}
登录后复制
登录后复制

提示

同一种类型返回值和命名返回值两种形式只能二选一,混用时将会发生编译错误,例如下面的代码:

复制纯文本复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
func namedRetValues() (a, b int, int)
登录后复制
登录后复制

编译报错提示:

mixed named and unnamed function parameters
登录后复制

意思是:在函数参数中混合使用了命名和非命名参数。

【相关推荐:Go视频教程】

以上就是go语言调用函数方法是什么的详细内容,更多请关注php中文网其它相关文章!

关键词: 局部变量 调用函数 函数调用