Go语言-函数

本文介绍了Go语言中的函数定义,包括参数、变参、返回值、命名返回值、匿名函数、延迟调用和错误处理。Go函数支持不定长变参、多返回值和命名返回值,不支持默认参数和重载。文中还讲解了闭包和延迟调用的工作原理,并给出了错误处理的推荐做法。
摘要由CSDN通过智能技术生成

函数定义

函数是结构化编程的最小模块单元,使用关键字‘func’定义函数。Go语言定义函数的一些特点总结如下:
- 无需前置声明
- 不支持命名嵌套定义
- 不支持同名函数重载
- 不支持默认参数
- 支持不定长变参
- 支持多返回值
- 支持命名返回值
- 支持匿名函数和闭包
函数属于第一类对象,具备相同签名(参数及返回值类型)的视为同一类型。
定义一个函数:
func test(x int,s string)int{} //其中func为关键字,test为函数名,(x int,s string)为参数列表,int为返回值类型

package main
import(
    "fmt"
)
func hello(){                 //定义一个名为hello的函数,参数列表为空返回值为空
    fmt.Println("hello word!")
}
func main(){                 //main函数程序的入口
    hello()
}

函数只能判断其是否为nil,不支持其它比较操作,从函数返回局部变量指针是安全的。

package main
import(
    "fmt"
)
func test()*int{
    a := 10
    return &a
}
func main(){
    var a *int = test()
    fmt.Println(a,*a)
}

输出:
0xc04203e1d0 10

参数

Go语言不支持有默认值得可选参数,不支持命名实参。调用时,必须按签名顺序传递指定类型和数量的实参,就算以“_”忽略的也不能省略掉。
不管是指针、引用类型,还是其他类型参数,都是值拷贝传递。如果函数参数过多,建议将其定义为一个复合结构类型。

变参

变参本质上就是一个切片。只能接受一个到多个同类型参数,并且放在列表尾部。

package main
import(
    "fmt"
)
func test(s string,a ...int){      //定义一个不定参数的函数,注意'...'不可省略
    fmt.Printf("%s,%T,%v\n",s,a,a) //输出类型及值
}
func main(){
    test("adb",1,2,3,4)
}

输出:
adb,[]int,[1 2 3 4]
既然变参是切片,那么参数复制的仅是切片自身,并不包含底层数组,因此可修改原数据。如果需要可使用内置函数copy复制底层数据。

package main
import(
    "fmt"
)
func test(a ...int){
    for i := range
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值