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