1. // 四则运算函数
    2. func eval(a, b int, op string) (int, error) {
    3. switch op{
    4. case "+":
    5. return a + b, nil
    6. case "-":
    7. return a - b, nil
    8. case "*":
    9. return a * b, nil
    10. case "/":
    11. q, _ := div(a, b)
    12. return q, nil
    13. default:
    14. return 0, fmt.Errorf("unsupported operation: %s", op)
    15. }
    16. }
    17. // 函数可以返回多个值
    18. func div_(a, b int) (int, int){
    19. return a / b, a % b
    20. }
    21. // 返回值可以起名字,但仅用于非常简单的函数
    22. // 返回值是否有名字只在函数体内部有影响,对于调用者而言没有区别
    23. func div(a, b int) (q, r int){
    24. q = a / b
    25. r = a % b
    26. return
    27. }
    28. // 使用函数式编程实现四则运算函数
    29. func apply(op func(int, int) int, a, b int) int {
    30. p := reflect.ValueOf(op).Pointer() // 获取函数的指针
    31. opName := runtime.FuncForPC(p).Name() // 获取函数名
    32. fmt.Printf("Calling function %s with args " + "(%d, %d)", opName, a, b)
    33. return op(a, b)
    34. }
    35. // 可变参数列表
    36. func sum(numbers ...int) int {
    37. s := 0
    38. for i := range numbers {
    39. s += numbers[i]
    40. }
    41. return s
    42. }
    43. func main() {
    44. if result, err := eval(3, 4, "x"); err != nil {
    45. fmt.Println("Error:", err)
    46. } else {
    47. fmt.Println(result)
    48. }
    49. q, r := div(13, 3)
    50. fmt.Println(q, r)
    51. fmt.Println(apply(
    52. func(a int, b int) int {
    53. return int(math.Pow(
    54. float64(a), float64(b)))
    55. }, 3, 4))
    56. fmt.Println(sum(1, 2, 3, 4, 5))
    57. }