7、函数

package main

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

// 一个返回值函数
func testfn1(a int,b int) int {
    return a + b
}

// 多个返回值函数
func testfn2(a int, b int)(c int, d string) {
    c = a + b
    d = "haha"
    return c,d
}

// 还可简写成
func testfn3 (a int, b int) (int, string) {
    return a + b, "haha"
}

// 可以新增报错参数
func testfn4 (a int, b int) (int,error) {
    if b > 4 {
        return 0,fmt.Errorf("错了%d",b)
    } else {
        return b, nil
    }
}

// 函数可以作为参数
func testfn5(op func (int, int) int, a, b int) int {
    p := reflect.ValueOf(op).Pointer()
    opName := runtime.FuncForPC(p).Name() // 获取到函数名字
    fmt.Println(opName) // main.main.func1 包名.入口函数名.函数名
    return op(a,b)
}

// 函数的可变参数列表
func sum(numbers ...int) int {
    s := 0
    for i := range numbers {
        s += numbers[i]
    }
    return s
}

func main() {
    fmt.Println(testfn1(1,2))
    fmt.Println(testfn2(1,2))
    fmt.Println(testfn3(1,2))

    // 接受函数其中一个返回值
    num, _ := testfn3(1,2) // 用_表示不接收该参数
    fmt.Println(num)

    fmt.Println(testfn4(1,5))

    // 传递函数参数
    testfn5(func(a int, b int) int {
        return int(math.Pow(float64(a),float64(b)))
    },1,2)

    // 可变参数 函数调用
    fmt.Println(sum(1,2,3))
}

 

posted @ 2021-11-19 13:23  JaydenQiu  阅读(29)  评论(0)    收藏  举报