函数是一个编程语言的灵魂,下面介绍一下golang的函数,我们做一个输入两个数,一个符号,判断符号种类进行计算的函数:
package main
import "fmt"
func main() {
if result, err := eval(1, 3, "÷"); err != nil {
fmt.Println("ERR:", err)
} else {
fmt.Println(result)
}
}
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, nil
default:
return 0, fmt.Errorf("Unknown operation:%s", op)
}
}
我们可以看一下go的源码,不难发现,所有函数几乎都是一个返回值一个err,我们也根据源码的规则定义了eval()函数,这是golang函数的第一个特性:多返回值
用switch的方法去判断太土,小学生才这么做,我们用函数编程来重做一个:
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println("pow(2,3)", apply(pow, 2, 3))
fmt.Println("mul(2,3)", apply(mul, 2, 3))
}
func apply(calcFunc func(int, int) int, a, b int) int {
return calcFunc(a, b)
}
func pow(a, b int) int {
return int(math.Pow(float64(a), float64(b)))
}
func mul(a, b int) int {
return a * b
}
有疑问加站长微信联系(非本文作者)