- go语言中的函数可以有多个返回值
//带余除法
func div(a, b int) (int, int) {
return a/b, a%b
}
- 可以给函数的返回值取名字 ,取名后可以直接在函数中当做变量来进行赋值
func div(a, b int) (q, r int) {
q = a/b
r = a%b
return q,r //或直接 return
}
- go中的函数的双值返回多用于错误处理,即返回一个所需的值和一个error类型,相比与直接用log.Panic(),它可以不终止程序向下运行
//四则操作
func eval(a, b int ,op string) (int, error) {
switch op {
case "+" :
return a+b, nil
case "-" :
return a-b, nil
case "*" :
return a*b, nil
case "/" :
return a/b, nil
default :
return -1, fmt.Errorf("unsupported operation : %s", op)
}
}注:func Errorf(format string, a ...interface{}) error
Errorf根据format参数生成格式化字符串并返回一个包含该字符串的错误。
-
go语言是一种函数式编程语言,函数是go语言中的一等公民,函数的参数,返回值以及函数体内都可以存在函数
func add(a,b int) int {
return a+b
}
func apply(op func(int, int) int, x, y int) int { // 以函数作为参数
return op(x,y)
}
func main(){
fmt.Println(apply(add,9,8))
}或直接在调用函数时,实现一个匿名函数
func apply(op func(int, int) int, x, y int) int {
return op(x,y)
}func main(){
fmt.Println(apply(func(a,b int) int {
return a+b },9,8))
}
- go中的函数没有默认参数 可选参数也没有函数重载 操作符重载,但有可变参数列表,即(变量 ...类型),此时类型钱的变量是一个此类型的数组
func sum (num ...int) int { //可变参数列表,这里的变量num是一个任意长度的 int类型的数组
sum := 0
for i := range num {
sum += num[i]
}
return sum
}
func main(){
fmt.Println(sum(1,2,3,4,5))
}
注:Java中的函数重载
- 就是方法名相同,方法参数的个数和类型不同,通过个数和类型的不同来区分不同的函数;
- 方法的重载跟返回值类型和修饰符无关,Java的重载是发生在本类中的,重载的条件实在本类中有多个方法名相同,
- 但参数列表不同(可能是,参数个数不同参数类型不同)跟返回值无关;