package main
import (
"flag"
"fmt"
)
var skillParam = flag.String("skill", "", "skill to perform")
func main() {
flag.Parse()
//定義map函數
var skill = map[string]func(){
"fire": func() {
fmt.Println("chicken fire")
},
"run": func() {
fmt.Println("soldier run")
},
"fly": func() {
fmt.Println("angel fly")
},
}
//判斷資料是否存在
if f, ok := skill[*skillParam]; ok {
f()
} else {
fmt.Println("skill not found")
}
}
- 第 8 行,定義指令行參數 skill,從指令行輸入 --skill 可以将
後的字元串傳入 skillParam 指針變量。=
- 第 12 行,解析指令行參數,解析完成後,skillParam 指針變量将指向指令行傳入的值。
- 第 14 行,定義一個從字元串映射到 func() 的 map,然後填充這個 map。
- 第 15~23 行,初始化 map 的鍵值對,值為匿名函數。
- 第 26 行,skillParam 是一個 *string 類型的指針變量,使用 *skillParam 擷取到指令行傳過來的值,并在 map 中查找對應指令行參數指定的字元串的函數。
- 第 29 行,如果在 map 定義中存在這個參數就調用,否則列印“技能沒有找到”。
PS D:\code> go run main.go --skill=fly
angel fly
PS D:\code> go run main.go --skill=run
soldier run