用map加func設(shè)計(jì)插件式的程序
巧妙了運(yùn)用了函數(shù)在go中是“一等公民“”的特性。創(chuàng)建一個(gè)map,并將value設(shè)置為func類型。這樣在根據(jù)string的key取到的值, 這個(gè)值就可以直接被調(diào)用。
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))
}
}