- 函数声明
函数声明包括函数名、形式参数列表,返回值列表以及函数体
func name(parameter-list)(result-list)
形式参数列表描述了参数名以及参数类型,这些参数都是局部变量,参数的值由参数调用者提供。返回值列表描述返回值变量名以及类型,如果没有返回值,返回值列表可以省略。
func add(x,y int)int{
return math.Sqrt(x*x+y*y)
}
函数调用时,go语言没有默认参数值,实参通过值的方式进行传递,函数的行参是实参的临时拷贝。对行参进行修改不会影响实参,但是如果实参包括引用类型如指针,切片,map,function,channel等类型。实参可能由于函数的间接引用被修改。
- 多返回值
go语言中,一个函数可以有多个返回值,一个是期望得到的返回值,另一个是函数出错时的错误信息。
func findLink(url string )([]string,err){
resp,err:=http.Get(url)
if err!=nil{
return nil,err
}
}
- 错误处理
对于那些将运行失败看作是预期结果的函数,它们会返回一个额外的返回值,通常是最后一个,如果导致失败的原因只有一个,额外的返回值可以是一个布尔值,通常被命名为ok
value,ok:=cache.Lookup(key)
if !ok{
//...cache[key] does not exist
}
处理错误的方式
1.传播错误:函数中某个子程序失败,会变成该函数失败。
2.重新尝试失败的操作。
3.输出错误信息并结束程序
4.只输出错误信息,并不中断程序
5.直接忽略错误
- 匿名函数
匿名函数只能在包级语法中被声明,func关键字后没有函数名
strings.Map(func(r rune) rune{return r+1},"HAL-9000")
- 可变参数
- 参数数量可变的函数称为可变参数函数