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