学习目标
掌握函数的定义与使用
函数
- 可以有多个返回值
- 参数都是值传递: slice, map, channel会有传引用的错觉
- 函数可以作为变量的值(和Java中的对象相似)
- 函数可以作为参数和返回值(和Java中的对象相似)
函数定义
package mymath //包
import "errors" //引入依赖
func Add(a int, b int) (ret int, err error) { //第一个()是请求参数,第二个是响应参数
if a < 0 || b < 0 { // 假设这个函数只支持两个非负数字的加法
err= errors.New("Should be non-negative numbers!")
return
}
return a + b, nil // 支持多重返回值
}
//如果参数列表中若干个相邻的参数类型的相同,比如上面例子中的a和b,则可以在参数列表 中省略前面变量的类型声明:
func Add2(a, b int)(ret int, err error) {
// ...
}
//如果返回值列表中多个返回值的类型相同,也可以用同样的方式合并。 如果函数只有一个返回值,也可以这么写:
func Add2(a, b int) int {
// ...
}
函数调用
import "mymath"// 假设Add被放在一个叫mymath的包中
// ...
c := mymath.Add(1, 2)
不定参数
func myfunc(args ...int) {
for _, arg := range args {
fmt.Println(arg)
}
}
//任意类型不定参数:
func Printf( args ...interface{}) {
// ...
}
匿名函数与闭包
匿名函数是指不需要定义函数名的一种函数实现方式
匿名函数是一个闭包
//匿名函数由一个不带函数名的函数声明和函数体组成,如下所示:
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) // 花括号后直接跟参数列表表示函数调用
码字不易如果对你有帮助请给个关注
爱技术爱生活 QQ群: 894109590