1. 首页
  2. Golang

go基础语法-函数

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 "/":
        return a / b, nil
    default:
        return 0, fmt.Errorf("未知:%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("函数名称:%s,参数(%d,%d)\n", opName, a, b)
    return op(a, b)
}

func pow(a, b int) int {
    return int(math.Pow(float64(a), float64(b)))
}
func sum(numbers ...int) int { //可变参数
    s := 0
    for i := range numbers {
        s += numbers[i]
    }
    return s
}

func main() {
    if result, err := eval(1, 3, "u"); err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Println(result)
    }
    q, _ := div(13, 3) //可只接受一个参数
    fmt.Println(q)
    fmt.Println(apply(pow, 2, 4))
    fmt.Println(sum(1, 2, 3, 4))
}

原创文章,作者:小童子,如若转载,请注明出处:https://www.caobinrg.com/538.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

邮件:caobinrg@163.com