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

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))
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容