《go语言编程》学习笔记四

函数

早够语言中,组成函数的有:关键字func、函数名、参数列表、返回值、函数体和返回语句。
go语言中的main就是一个函数。
如下:

func main() {
    fmt.Println("hello world")
}

函数的调用

在go语言中,函数在调用时采用下边的方式:

import "mymath"// 假设Add被放在一个叫mymath的包中
// ...
c := mymath.Add(1, 2)

在go语言中,函数支持多返回值,并且函数名的首字母大小写十分严格,小写字母只能在本包中可见。

不定参数

在go语言中,定义不定参数如下面的例子:

func myfunc(args ...int) {
for _, arg := range args {
fmt.Println(arg)
}
}

调用方式:

myfunc(2, 3, 4)
myfunc(1, 3, 7, 13)

形如…type格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数。它是一个语法糖(syntactic sugar),即这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说,使用语法糖能够增加程序的可读性,从而减少程序出错的机会。
从内部实现机理上来说,类型…type本质上是一个数组切片,也就是[]type,

传递不定参数的方式:

func myfunc(args ...int) {
// 按原样传递
myfunc3(args...)
// 传递片段,实际上任意的int slice都可以传进去
myfunc3(args[1:]...)
}

任意类型的不定参数

func Printf(format string, args ...interface{}) {
// ...
}

interface{}传递任意类型数据是Go语言的常用用法

多返回值

func (file *File) Read(b []byte) (n int, err Error)

如果读取文件成功,则返回值中的n为读取的字节数, err为nil,否则err为具体的出错信息:

匿名函数

匿名函数由一个不带函数名的函数声明和函数体组成,Go语言支持随时在代码里定义匿名函数。

func(a, b int, z float64) bool {
return a*b <int(z)
}

匿名函数可以直接赋值给一个变量或者直接执行:

f := func(x, y int) int {
return x + y
}
func(ch chan int) {
ch <- ACK
} (reply_chan) // 花括号后直接跟参数列表表示函数调用

闭包:

Go的匿名函数就是一个闭包
闭包是可以包含自由(未绑定到特定对象)变量的代码块,这些变量不在这个代码块内或者任何全局上下文中定义,而是在定义代码块的环境中定义。要执行的代码块(由于自由变量包含在代码块中,所以这些自由变量以及它们引用的对象没有被释放)为自由变量提供绑定的计算环境(作用域)。
闭包的价值在于可以作为函数对象或者匿名函数,对于类型系统而言,这意味着不仅要表示数据还要表示代码。支持闭包的多数语言都将函数作为第一级对象,就是说这些函数可以存储到变量中作为参数传递给其他函数,最重要的是能够被函数动态创建和返回。

错误处理

error接口

error接口是go语言引入的一个关于错误处理的标准模式,

type error interface {
Error() string
}

defer关键字,清理指定内容,在go中可以存在多个defer,并且它是先进后出的。
panic()recover()
panic()和recover()以报告和处理运行时错误和程序中的错误场景:

func panic(interface{})
func recover() interface{}

当在一个函数执行过程中调用panic()函数时,正常的函数执行流程将立即终止,但函数中之前使用defer关键字延迟执行的语句将正常展开执行,之后该函数将返回到调用函数,并导致逐层向上执行panic流程,直至所属的goroutine中所有正在执行的函数被终止。错误信息将被报告,包括在调用panic()函数时传入的参数,这个过程称为错误处理流程。从panic()的参数类型interface{}我们可以得知,该函数接收任意类型的数据,比如整型、字符串、对象等。
调用方式:

panic(404)
panic("network broken")
panic(Error("file not exists"))

recover()函数用于终止错误处理流程。一般情况下, recover()应该在一个使用defer关键字的函数中执行以有效截取错误处理流程。如果没有在发生异常的goroutine中明确调用恢复过程(使用recover关键字) ,会导致该goroutine所属的进程打印异常信息后直接退出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值