Go語言庫系列之flag

2022-07-03 19:24:11 字數 1846 閱讀 7356

終端(命令列)操作是程式設計師的必備技能,但是你知道怎麼通過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()

支援多種執行方式

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

$ girl -height 170

$ girl --height 170

$ girl --height=170

$ girl -height=170

支援多種引數值型別

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

布林型別支援多種寫法

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

1, 0, t, f, t, f, true, false, true, false, true, false
隱式處理接收的引數值

如果我要悄悄地把傳入身高減去5厘公尺怎麼辦?

第一步,定義乙個height型別

type height int
第二步,實現flag.value介面的兩個方法

func (h *height) string() string 

func (h *height) set(value string) error

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

第三步,定義height型別變數

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

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

Go語言標準庫之flag

go語言內建的flag包實現了命令列引數的解析,flag包使得開發命令列工具更為簡單。如果你只是簡單的想要獲取命令列引數,可以像下面的 示例一樣使用os.args來獲取命令列引數。package main import fmt os os.args demo func main 將上面的 執行go ...

Go語言庫系列之dotsql

dotsql不是orm,也不是sql查詢語句的構建器,而是可以在乙個sql檔案中拎出某幾行來執行的工具,非常類似於ini配置檔案的讀取。如果還不理解,我們來看如下內容。name create users table create table users id integer primary key ...

Go語言標準庫flag基本使用

文章引用自 如果你只是簡單的想要獲取命令列引數,可以像下面的 示例一樣使用os.args來獲取命令列引數。package main import fmt os demo func main 將上面的 執行go build o args demo 編譯之後,執行 args demo a b c d a...