兄弟連區塊鏈培訓之Go語言學習擷取命令列參數

來源:互聯網
上載者:User

  “區塊鏈+時代無疑會是下一個風口,然而現在的區塊鏈行業專業型人才正在遭遇瓶頸”兄弟連教育區塊鏈學院院長尹成表示,“希望能通過兄弟連教育區塊鏈培訓學院為社會為企業培養並輸送更多優質的區塊鏈高精尖型技術人才。


  部署golang項目時難免要通過命令列來設定一些參數,那麼在golang中如何操作命令列參數呢?可以使用flag庫和os庫。


  1.flag庫的使用

  Go語言標準庫提供了用於快迅解析命令列參數的flag包,大致的使用步驟如下:

  a.通過flag.String(),flag.Bool(),flag.Int()等方式來定義命令列中需要使用的參數。

  b.在定義完flag後,通過調用flag.Parse()來進行對命令列參數的解析。

  c.擷取flag.String(),flag.Bool(),flag.Int()等方法的傳回值,即對應使用者輸入的參數.

  需要注意的是flag.Xxx()返回的值是變數的記憶體位址,要擷取值時要通過在變數前加*(星號)擷取.


  說明:

  像flag.Int、flag.Bool、flag.String這樣的函數格式都是一樣的,調用的時候需要傳入3個參數


  參數的說明如下:

  一、arg表示參數名稱,在控制台的時候,提供給使用者使用.

  二、arg表示預設值,如果使用者在控制台沒有給該參數賦值的話,就會使用該預設值.

  三、arg表示使用說明和描述,在控制台中輸入-arg的時候會顯示該說明,類似-help

  看個完整的使用例子:

  packagemain


  import(


  "flag"


  "fmt"


  )


  funcmain(){


  married:=flag.Bool("married",false,"Areyoumarried?")


  age:=flag.Int("age",22,"Howoldareyou?")


  name:=flag.String("name","","Whatyourname?")


  varaddressstring


  //flag.StringVar這樣的函數第一個參數換成了變數地址,後面的參數和flag.String是一樣的。


  flag.StringVar(&address,"address","GuangZhou","Whereisyouraddress?")


  flag.Parse()//解析輸入的參數


  fmt.Println("輸出的參數married的值是:",*married)//不加*號的話,輸出的是記憶體位址


  fmt.Println("輸出的參數age的值是:",*age)


  fmt.Println("輸出的參數name的值是:",*name)


  fmt.Println("輸出的參數address的值是:",address)


  }


  從運行結果中可以看出,address參數我們並沒有指定值,則輸出的就是預設值.

  另外,-arg後面的=號也不是必須的,可以用空格代替.

  如果要查看該程式的所有參數的使用,可以使用-help來查看,如下:

  2.os庫的使用

  直接看例子

  packagemain


  import(


  "os"


  "fmt"


  )


  funcmain(){


  args:=os.Args//擷取使用者輸入的所有參數


  ifargs==nil||len(args)<2{


  Usage()//如果使用者沒有輸入,或參數個數不夠,則調用該函數提示使用者


  return


  }


  name:=args[1]//擷取輸入的第一個參數


  age:=args[2]//擷取輸入的第二個參數


  fmt.Println("yournameis:",name,"\nyourageis:",age)


  }


  varUsage=func(){


  fmt.Println("youname?");


  fmt.Println("youage?");


  }


  個人感覺還是flag擷取參數好用一點,因為flag更貼切參數的用法,而且可以查看詳情.

  最後補充下如何擷取變數的記憶體位址和接收方式

  packagemain


  import(


  "fmt"


  )


  funcmain(){


  varnamestring="abc"


  varnameAddress*string=&name;//如果要接收變數的記憶體位址,變數對應的類型前要加*號


  fmt.Println("name變數的記憶體位址:",&name)


  fmt.Println("nameAddress的值:",nameAddress)


  fmt.Println("&name==nameAddress?",&name==nameAddress)


  fmt.Println("nameAddress對應變數的值:",*nameAddress)//記憶體位址前加*號則可以看到對應的值了.


fmt.Println("name變數的值:",*&*&name)//*號和&可以多次組合來使用,閱讀的時候從右往左


}

高能預警,兄弟連教育區塊鏈直播課程8月持續火爆來襲!

原價1188元的12節區塊鏈進階課程,現僅需1元!

還可免費領取《Go語言基礎實戰項目開發》與《Go語言進階實戰項目開發》教材兩本!!

限時限量!!先到先得!!

http://www.ydma.cn/open/course/24

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.