欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go学习笔记04-函数

程序员文章站 2022-03-20 20:03:24
[toc] 函数定义 函数定义与变量定义相似, 函数示例 小结 函数用关键字 func 定义。 定义函数时, 函数名在前,返回类型在后 。 一个函数可以有 多个返回值 。 返回值可以指定一个名字(仅用于非常简单的函数 )。 函数可以 作为参数 。 Go语言中函数 没有默认参数、可选参数,函数重载 ......

目录

函数定义

函数定义与变量定义相似,

func function_name(var1, var2, var3, ...) (return_type1, return_type1, ...) {
    //function body
}

函数示例

package main

import (
    "fmt"
    "math"
    "reflect"
    "runtime"
)

//函数可以有多个参数,多个返回值
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 "/":
        //函数div()有两个返回值,有一个返回值没用时可以用"_"代替
        q, _ := div(a, b)
        return q, nil
    default:
        return 0, fmt.errorf(
            "unsupported operation: %s", op)
    }
}

//可以给返回值起名,但是只建议在很简单的函数中使用
func div(a, b int) (q, r int) {
    return a / b, a % b
}

//函数可以作为另一个函数的参数
func apply(op func(int, int) int, a, b int) int {
    
    //获取函数的指针
    p := reflect.valueof(op).pointer()
    //获取函数名
    opname := runtime.funcforpc(p).name()
    fmt.printf("calling function %s with args "+
        "(%d, %d)\n", opname, a, b)

    return op(a, b)
}

//定义可变参数
func sum(numbers ...int) int {
    s := 0
    //range获取可变参数范围
    for i := range numbers {
        s += numbers[i]
    }
    return s
}

func swap(a, b int) (int, int) {
    return b, a
}

func main() {
    fmt.println("error handling")
    if result, err := eval(3, 4, "x"); err != nil {
        fmt.println("error:", err)
    } else {
        fmt.println(result)
    }
    q, r := div(13, 3)
    fmt.printf("13 div 3 is %d mod %d\n", q, r)
    
    //函数式编程,可以在表达式里直接定义一个匿名函数
    fmt.println("pow(3, 4) is:", apply(
        func(a int, b int) int {
            return int(math.pow(
                float64(a), float64(b)))
        }, 3, 4))

    fmt.println("1+2+...+5 =", sum(1, 2, 3, 4, 5))

    a, b := 3, 4
    a, b = swap(a, b)
    fmt.println("a, b after swap is:", a, b)
}

小结

  • 函数用关键字 func 定义。
  • 定义函数时,函数名在前,返回类型在后
  • 一个函数可以有多个返回值
  • 返回值可以指定一个名字(仅用于非常简单的函数 )。
  • 函数可以作为参数
  • go语言中函数没有默认参数、可选参数,函数重载