天天看點

Go語言學習日記【一】【匿名函數實作操作封裝】

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