1. 程式人生 > 程式設計 >Go語言庫系列之flag的具體使用

Go語言庫系列之flag的具體使用

背景

終端(命令列)操作是程式設計師的必備技能,但是你知道怎麼通過golang製作出如下命令嗎?

$ flag girl -h
Usage of girl:
 -height int
  身高 (default 140)

$ flag girl --height 170

恭喜你獲得了身高 170 的女朋友

極速上手

整個實現非常簡單,只需要5個步驟

第一步,引庫

import "flag"

第二步,定義變數

定義該變數的作用是儲存命令列引數傳來的值

var height int

第三步,配置命令資訊

在main函式或init函式中加入

flag.IntVar(&height,"height",140,"身高")
  • 第一個引數是定義的變數引用
  • 第二個引數:命令的名稱
  • 第三個引數:命令引數的預設值
  • 第四個引數:命令的用法提示

第四步,解析引數

在main函式中追加

flag.Parse()

第五步,列印變數

在main函式中追加

fmt.Println("恭喜你獲得了身高",height,"的女朋友")

大功告成,感興趣的同學可以自行測試。

完整程式碼

package main

import (
 "flag"
 "fmt"
)

var height int

func main() {
 flag.IntVar(&height,"身高")
 flag.Parse()
 fmt.Println("恭喜你獲得了身高","的女朋友")
}

高手進階

支援多種執行方式

在終端執行時,以下幾種傳參方式都被支援

$ girl -height 170
$ girl --height 170
$ girl --height=170
$ girl -height=170

支援多種引數值型別

目前支援字串、布林、整型、浮點、時間等多種型別,完全該所有場景。

布林型別支援多種寫法

雖然布林只有true或false,但寫法卻可以各種變種,非常騷氣,支援的寫法有

1,t,f,T,F,true,false,TRUE,FALSE,True,False

隱式處理接收的引數值

如果我要悄悄地把傳入身高減去5釐米怎麼辦?

第一步,定義一個height型別

type height int

第二步,實現flag.Value介面的兩個方法

func (h *height) String() string {
 return fmt.Sprint(*h)
}

func (h *height) Set(value string) error {
 valueInt,_ := strconv.Atoi(value)
 *h = height(valueInt - 5)
 return nil
}

String方法用於格式化值,Set方法用於處理變數設定時候的邏輯。

第三步,定義height型別變數

var heightFlag height

第四步,主函式配置及解析

func main() {
 flag.Var(&heightFlag,"身高")
 flag.Parse()
 fmt.Println(heightFlag)
}

程式碼與極速上手中的主函式內容大致相同,只是呼叫了flag.Var方法,該方法不需要傳入預設值。

到此這篇關於Go語言庫系列之flag的具體使用的文章就介紹到這了,更多相關Go flag內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!