<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      理解Go語言組件flag

      作用

      主要用來實現命令行的參數解析,以達到實現以下效果的目的

      $ cmd -flagname 123
      

      使用方式

      flag是Go語言的內置包,能接收的參數類型主要有字符串、布爾和數值類型。

      方式一

      func main() {
        var ip = flag.String("ip", "127.0.0.1", "此處傳入IP地址")
        flag.Parse()
        fmt.Println(*ip)
      }
      

      我們在main函數中調用flag.String函數來定義命令,該函數共有三個參數

      • 第一個參數是命令名稱
      • 第二個參數為默認值,也就是不傳ip時默認拿到的值
      • 第三個參數是給用戶的提示

      同時該函數返回的是指針類型,打印變量ip時記得加上指針符號來輸出地址對應的值。在執行flag.String后,記得執行flag.Parse來解析命令,否則不能執行成功。我們來測試一下,先鍵入一個錯的參數,會得到以下提示。

      go run main.go -i
      
      flag provided but not defined: -i
      Usage of /var/folders/3s/5v6r481x17x5ks_7q1dzmlsw0000gp/T/go-build400337564/b001/exe/main:
        -ip string
              此處傳入IP地址 (default "127.0.0.1")
      

      加上-ip參數和值,可以直接獲取到對應的值

      go run main.go -ip 192.168.1.1
      
      192.168.1.1
      

      除了-ip 192.168.1.1這種形式外,以等號賦值的方式也是支持的

      go run main.go -ip=192.168.1.1
      
      192.168.1.1
      

      現在什么都不傳,可以直接拿到設置的默認值

      go run main.go
      
      127.0.0.1
      

      方式二

      除上述內容之外,還有一種寫法,我們再增加一個端口號為例

      var port int
      
      func init() {
      	flag.IntVar(&port, "port", 80, "端口號")
      }
      
      func main() {
      	flag.Parse()
      	fmt.Println("port", port)
      }
      

      首先定義一個整型變量port,在init函數中調用flag.IntVar函數,該函數與flag.String相比,少了返回值,且多一個參數,第一個參數是預先定義好的變量,為了方便IntVar內部修改變量值,所以該參數傳引用類型。

      方式三

      如果我們想在接收參數值的過程當中做一些處理,那么也可以自己進行實現。假如我們需要對傳入的用戶名user進行處理,加上一個_suffix后綴。

      type user string
      
      func (u *user) String() string {
      	return fmt.Sprint(*u)
      }
      
      func (u *user) Set(value string) error {
      	if len(value) < 3 {
      		return errors.New("姓名長度不得小于3位")
      	}
      	*u = user(value + "_suffix")
      	return nil
      }
      

      首先需要定義一個類型,然后實現兩個方法String與Set,在Set方法中我對傳入的值進行了長度判斷,如果小于3個字符就拋出錯誤,否則就將傳入的值拼接一個后綴_suffix

      var userFlag user
      
      func main() {
      	flag.Var(&userFlag, "user", "用戶名")
      	flag.Parse()
      	fmt.Println(userFlag)
      }
      

      接下來定義一個user類型的變量,然后在main函數中調用flag.Var方法,將變量地址傳入,接下來執行命令做測試。

      go run flagVar.go -user pingye
      pingye_suffix
      

      成功拼接上了后綴。

      Go語言組件學習示例開源庫,歡迎star
      https://github.com/EnochZg/golang-examples

      posted @ 2020-03-25 17:13  MARIOOW  閱讀(1238)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久精品熟妇丰满人妻久久| 午夜精品福利亚洲国产| 亚洲精品国产av一区二区| 久久精品蜜芽亚洲国产av| 日韩深夜福利视频在线观看| 欧美videos粗暴| 日本午夜精品一区二区三区电影 | 亚洲激情av一区二区三区| 国产精品一区二区三区污| 亚洲免费成人av一区| 久久青青草原亚洲AV无码麻豆| 成人深夜节目在线观看| 激情综合网激情综合| 天天躁日日躁狠狠躁中文字幕| 亚洲成人av综合一区| 在线看片免费不卡人成视频| 商南县| 久久91精品牛牛| 天堂va蜜桃一区二区三区| 熟女一区二区中文字幕| 亚洲欧美综合精品成| 日韩幕无线码一区中文| 国产精品揄拍一区二区久久| 一区二区三区精品偷拍| 综合偷自拍亚洲乱中文字幕| 人人妻一区二区三区| 精品无码成人久久久久久| 亚洲人成线无码7777| 东京热人妻丝袜无码AV一二三区观| 国产午夜一区二区在线观看 | 国产在线国偷精品产拍| 狠狠色噜噜狠狠狠狠2021| 国产成人AV男人的天堂| 国产一区二区日韩经典| 国产精品天干天干综合网| 巩义市| 一区二区在线观看 激情| 国产一区在线播放无遮挡| 黑人巨大av无码专区| 欧美不卡无线在线一二三区观| 精品视频在线观自拍自拍|