用map加func设计插件式的程序
巧妙了运用了函数在go中是“一等公民“”的特性。创建一个map,并将value设置为func类型。这样在根据string的key取到的值, 这个值就可以直接被调用。
package main
import (
"os"
"fmt"
"strconv"
)
func add(m, n int) int {
return m + n
}
func sub(m, n int) int {
return m - n
}
func mul(m, n int) int {
return m * n
}
func div(m, n int) int {
return m / n
}
func main() {
func_map := map[string]func(m, n) int{
"+": add,
"-": sub,
"*": mul,
"/": div,
}
m, _ := strconv.Atoi(os.Args[1])
n, _ := strconv.Atoi(os.Args[3])
f := func_map[os.Args[2]]
if f != nil{
fmt.Println(f(m, n))
}
}