2018-10-19Go语言第二天-函数

2018-10-19  本文已影响0人  恶魔辣条儿
package main

import "fmt"
import "math"

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
    q, _ := div(a, b)
    return q, nil
  default:
    // panic("unsupported operation: " + op)  中断执行
    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) {
//   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 {
  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() {
  fmt.Println(eval(3, 4, "*"))
  fmt.Println(eval(12, 4, "/"))
  fmt.Println(eval(12, 4, "x"))
  if result, err := eval(3, 4, "x"); err != nil {
    fmt.Println("Error:", err)
  } else {
    fmt.Println(result)
  }

  fmt.Println(div(13, 3))
  q, r := div(13, 3)  //
  fmt.Println(q, r)
  fmt.Println(apply(pow, 2, 2))
  fmt.Println(apply(
    func(a int, b int) int {
      return int(math.Pow(float64(a), float64(b)))
    }, 2, 3))
  fmt.Println(sum(1, 2, 3, 4, 5))
}

上一篇 下一篇

猜你喜欢

热点阅读