Go 语言函数定义_声明_调用(超详细)
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ; - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 54w+ 字,讲解图 2476+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 1900+ 小伙伴加入学习 ,欢迎点击围观
一、定义一个普通函数
Go 语言中,定义函数需要以 func
标识开头,后面紧接着函数名、参数列表、返回参数列表以及函数体,格式如下:
func 函数名(参数列表) (返回参数列表) {
函数体
}
1.1 函数名
函数名的命名有以下约束:
- 函数名由字母、数字、下划线组成;
- 函数名不能以数字开头;
- 同一包内,函数名不能重名。
1.2 参数列表
参数列表中声明的每一个参数由变量名和参数类型组成,示例代码如下:
func foo(a int, b string)
注意,参数列表中的变量以局部变量的方式存在。
1.3 返回参数列表
可以是返回一个值类型,也可以是一个组合,即返回多个参数。另外,当函数中声明了有返回值时,函数体中必须 使用 return
语句提供返回值。
1.4 函数体
函数体表示能够被重复调用的代码片段。
二、参数列表简写
当参数列表中定义了多个参数,且参数类型相同时,代码如下:
func foo(a int, b int) int {
}
上面代码中,变量 a、b 的类型均为整型 int
,可以采用以下简写方式:
func foo(a , b int) int {
}
统一定义一个 int
类型即可。
三、函数返回值
在 Go 语言中,返回值支持返回多个,常用场景下,多返回值的最后一个参数会返回函数执行中可能发生的错误,示例代码如下:
conn, err := connectToDatabase()
上面这段代码中,函数 connectToDatabase()
用来获取数据库连接,conn
表示数据库连接,err
用来接收获取过程中可能发生的错误。
3.1 同一类型的返回值
如果函数返回值是统一类型,则用括号将多个返回值括起来,以逗号隔开,示例代码如下:
package main
import "fmt"
func say(name, content string) (string, string) {
return name, content
}
func main() {
name, content := say("犬小哈", "犬小哈教程")
fmt.Println(name, content)
}
注意:使用
return
语句返回多个值时,值的顺序需要与函数声明的返回值一致。
代码输出如下:
犬小哈 犬小哈教程
图示:
3.2 带有变量名的返回值
Go 语言支持对返回值进行命名,命名后代码的可读性更佳。
命名的返回值默认值为该类型的默认值,例如,若返回值为整型 int
,则默认值为 0;若为字符串 string
,则默认值为空字符串;布尔为 false
; 指针为 nil
等。
下面是代码示例:
func initValue() (a int, b int) {
a = 1
b = 2
return
}
上面这段代码中,函数声明中将返回值变量命名为 a、b,然后在函数体中分别对 a 、 b 进行赋值, 然后使用 return
语句进行返回。
注意: 当函数使用命名进行返回时,可以在
return
语句中不填返回值列表,当然填写也是可以的,上面的代码与下面的代码执行效果相同:func initValue() (a int, b int) { a = 1 return a, 2 }
四、调用函数
函数在定义以后,要如何调用呢?
函数的调用格式如下:
返回值列表 = 函数名(参数列表)
- 函数名:需要被调用的函数名;
- 参数列表: 传入的参数列表,以逗号隔开;
- 返回值列表:多个返回值以逗号隔开;
下面代码演示如何调用函数:
package main
import "fmt"
func initValue() (a int, b int) {
a = 1
return a, 2
}
func main() {
// 调用 initValue 函数
a, b := initValue()
fmt.Println(a, b)
}
代码输出如下:
1 2
PS: 函数内定义的局部变量只能作用在函数体中,函数执行结束后,这些变量都会被释放掉,无法再次访问。
五、结语
本小节中,我们学习了在 Go 语言中要如何定义函数,参数列表的简写,函数的返回值以及如何调用函数,希望小伙伴们学完能有所收获~