// 四则运算函数
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))
}