// 四则运算函数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 "/": q, _ := div(a, b) return q, nil default: return 0, fmt.Errorf("unsupported operation: %s", op) }}// 函数可以返回多个值func div_(a, b int) (int, int){ return a / b, a % b}// 返回值可以起名字,但仅用于非常简单的函数// 返回值是否有名字只在函数体内部有影响,对于调用者而言没有区别func div(a, b int) (q, r int){ q = a / b r = a % b return}// 使用函数式编程实现四则运算函数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)", opName, a, b) return op(a, b)}// 可变参数列表func sum(numbers ...int) int { s := 0 for i := range numbers { s += numbers[i] } return s}func main() { if result, err := eval(3, 4, "x"); err != nil { fmt.Println("Error:", err) } else { fmt.Println(result) } q, r := div(13, 3) fmt.Println(q, r) fmt.Println(apply( func(a int, b int) int { return int(math.Pow( float64(a), float64(b))) }, 3, 4)) fmt.Println(sum(1, 2, 3, 4, 5))}