Go语言基础篇(5) —— Go语言的函数

469 阅读2分钟

学习目标

掌握函数的定义与使用

函数

  1. 可以有多个返回值
  2. 参数都是值传递: slice, map, channel会有传引用的错觉
  3. 函数可以作为变量的值(和Java中的对象相似)
  4. 函数可以作为参数和返回值(和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