Go语言学习笔记:7.1 函数
定义
func funcName(param-list)(result-list){
//code
}
特点
- 可无输入输出参数
多个相邻的相同类型参数可简写
func test(a int,b int){ ...
func test(a,b int){ ...支持有名的返回值,参数名就相当于函数体内最外层的局部变量,命名返回值变量会被初始化为零值,最后的return可以不带参数名直接返回
func add(a,b int)(sum int){
sum = a + b
return
//等效于 return sum
}- 不支持默认值
- 不支持函数重载
- 不支持命名函数嵌套
func xxx(){
,这个{
一定要与声明在同一行- 当只有一个返回值时可省去括号
多值返回
与Python相同(或类似?)
func test()(int,int){
return a,b
}
func main(){
a,b := test()
}
实参与形参的传递
Go函数实参到形参的传递永远是值拷贝,有时函数调用后实参指向的值发生的改变,那是因为参数传递的是指针值的值拷贝,实参是一个指针变量,传递给形参的是这个指针变量的副本,二者指向同一地址。
不定参数
声明
func funcName(param ...type)
特点
- 所有不定参数的类型必须相同
- 不定参数必须是函数的最后一个参数
- 不定参数在函数内相当于切片,对切片的操作同样适合对不定参数的操作,比如遍历
- 切片可以作为参数传递给不变参数,切片名后要加“...”,例子见下面
- 形参为不定参数的函数和形参为切片的函数类型不相同
func sum(arr ...int)(sum int){
for i,v := range arr{
sum += v
}
return
}
//传参
s := []int{1,2,3,4,5}
sum(s...)
其他要说的
按道理上面的某些代码应该有特殊样式,不过预览看来没有(不会Markdown)。