• 函数组成
      • 函数名
      • 参数列表(parameter-list)
      • 返回值(result-list)
      • 函数体(body)
    • 单返回值函数
    1. return a + b
    2. }
    • 多返回值函数
    1. func multi()(string, int){
    2. return "name", 18
    3. }
    • 命名返回值
    • 参数可变函数
    1. func sum(nums ...int)int{
    2. fmt.Println("len of nums is : ", len(nums))
    3. res := 0
    4. for _, v := range nums{
    5. res += v
    6. }
    7. return res
    8. func main(){
    9. fmt.Println(sum(1))
    10. fmt.Println(sum(1,2))
    11. fmt.Println(sum(1,2,3))
    • 匿名函数
    1. func main(){
    2. func(name string){
    3. fmt.Println(name)
    4. }("禾木课堂")
    5. }
    • 闭包
    • 函数作为参数
    1. func sayHello(name string) {
    2. fmt.Println("Hello ", name)
    3. }
    4. func logger(f func(string), name string) {
    5. fmt.Println("start calling method sayHello")
    6. f(name)
    7. fmt.Println("end calling method sayHellog")
    8. func main() {
    9. logger(sayHello, "禾木课堂")
    10. }
    • 传值和传引用
    1. name = "hemuketang"
    2. }
    3. func sendAddress(name *string) {
    4. *name = "hemuketang"
    5. }
    6. func main() {
    7. // 传值和传引用
    8. str := "禾木课堂"
    9. fmt.Println("before calling sendValue, str : ", str)
    10. sendValue(str)
    11. fmt.Println("after calling sendValue, str : ", str)
    12. fmt.Println("before calling sendAddress, str : ", str)
    13. sendAddress(&str)
    14. }