go语言学习笔记(2)命令源码文件
生活随笔
收集整理的這篇文章主要介紹了
go语言学习笔记(2)命令源码文件
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.源碼文件分類
環(huán)境變量GOPATH指向的是一個(gè)或多個(gè)工作區(qū),而且每個(gè)工作區(qū)都會(huì)有以代碼包為基本組織形式的源碼文件。
源碼文件分為三種,即:命令源碼文件、庫(kù)源碼文件和測(cè)試源碼文件。
2.什么是命令源碼文件,它有什么用途,怎樣編寫它
命令源碼文件是程序的運(yùn)行入口,是每個(gè)可讀庫(kù)運(yùn)行的程序必須擁有的。如果一個(gè)源碼文件聲明屬于main包,并且包含一個(gè)無(wú)參數(shù)聲明且無(wú)結(jié)果聲明的main函數(shù),那么就是命令源碼文件。
當(dāng)需要模塊化編程時(shí),我們會(huì)將代碼拆分到多個(gè)文件下,不同的代碼包中。但無(wú)論怎樣,對(duì)于一個(gè)獨(dú)立的程序來(lái)說(shuō)命令源碼文件永遠(yuǎn)只會(huì)也只能有一個(gè)。如果有與命令源碼文件同包的源碼文件,那么他們也應(yīng)該聲明屬于main包。
3.命令源碼文件怎樣接收參數(shù)go語(yǔ)言標(biāo)準(zhǔn)庫(kù)中有一個(gè)代碼包專門用于接收和解析命令參數(shù)。這個(gè)代碼包的名字叫做flag。下面根據(jù)例子來(lái)進(jìn)行講解。
例子:package main
import ("flag" //導(dǎo)入所需的flag包"fmt")
var name string
func init() {flag.StringVar(&name, "name", "every one", "to say hello")//初始化flag,第一個(gè)參數(shù)用于儲(chǔ)存該命令參數(shù)的值的地址,第二個(gè)參數(shù)是為了指定命令參數(shù)名稱,第三個(gè)參數(shù)是為使用參數(shù)時(shí)的默認(rèn)值,第四個(gè)參數(shù)為說(shuō)明參數(shù)。此處還可以改為var name = flag.String("name","everyone","the greeting object")
}func main() {flag.Parse()//解析命令參數(shù)fmt.Println("hello world " + name)}
4.怎樣在運(yùn)行命令源碼文件時(shí)傳入?yún)?shù),以及怎樣查看參數(shù)使用說(shuō)明
運(yùn)行如下命令傳入?yún)?shù):go run test.go -name="Robert"運(yùn)行結(jié)果:Hello world Robert查看命令源碼文件的參數(shù)說(shuō)明 go run test.go --help結(jié)果:Usage of C:\Users\nshu\AppData\Local\Temp\go build740295486\b001\exe\test.exe:-name stringto say hello (default "every one")exit status 2第一行為go run臨時(shí)生成的可執(zhí)行文件的完整路徑。
5.怎樣自定義命令源碼文件的參數(shù)使用說(shuō)明自定義命令源碼文件的參數(shù)使用說(shuō)明有很多方法,在這舉幾個(gè)例子:
1.對(duì)變量flag.Usage重新賦值,該變量在聲明flag時(shí)就已經(jīng)被賦值了,在這里可以對(duì)它重新賦值。對(duì)flag.Usage的賦值必須在調(diào)用flag.Parse函數(shù)之前例子:
flag.Usage = func() {fmt.Printf("Usage of %s:\n", "question")flag.PrintDefaults()}
再輸入go run test.go --help之后輸出:
Usage of question:-name stringto say hello (default "every one")exit status 2
2.當(dāng)我們?cè)谡{(diào)用flag包中的一些函數(shù)(例如StringVar)的時(shí)候,實(shí)際上在調(diào)用flag.CommandLine變量的對(duì)應(yīng)方法,這時(shí)我們可以通過(guò)以下方法來(lái)定義參數(shù)使用說(shuō)明:func init() { flag.CommandLine= flag.NewFlagSet("", flag.ExitOnError)flag.CommandLine.Usage = func() {fmt.Printf("Usage of %s:\n", "question")flag.PrintDefaults()}flag.StringVar(&name, "name", "every one", "to say hello")}此時(shí)將flag.ExitOnError改為flag.PanicOnError此時(shí)就會(huì)產(chǎn)生另一種輸出效果。這兩個(gè)參數(shù)都是flag包中的常量。flag.ExitOnError的含義是,告訴命令參數(shù)容器,當(dāng)命令后跟--help或者參數(shù)不正確時(shí),打印命令參數(shù)使用說(shuō)明后以狀態(tài)碼2結(jié)束當(dāng)前程序。
flag.PanicOnError與之的區(qū)別是在最后跑出“運(yùn)行時(shí)錯(cuò)誤”
3.我們還可以自己創(chuàng)建一個(gè)私有的命令參數(shù)容器來(lái)代替flag.CommandLine
例子:package main
import ("flag""fmt""os")
var name stringvar nshu = flag.NewFlagSet("", flag.PanicOnError)
func init() {nshu.Usage = func() {fmt.Printf("Usage of %s:\n", "question")nshu.PrintDefaults()}nshu.StringVar(&name, "name", "every one", "to say hello")}func main() {// flag.Usage = func() {// fmt.Printf("Usage of %s:\n", "question")// flag.PrintDefaults()// }nshu.Parse(os.Args[1:]) //與之前flag下的Parse不一樣fmt.Println("hello world " + name)}這種定制并不會(huì)影響全局變量flag.CommandLine
環(huán)境變量GOPATH指向的是一個(gè)或多個(gè)工作區(qū),而且每個(gè)工作區(qū)都會(huì)有以代碼包為基本組織形式的源碼文件。
源碼文件分為三種,即:命令源碼文件、庫(kù)源碼文件和測(cè)試源碼文件。
2.什么是命令源碼文件,它有什么用途,怎樣編寫它
命令源碼文件是程序的運(yùn)行入口,是每個(gè)可讀庫(kù)運(yùn)行的程序必須擁有的。如果一個(gè)源碼文件聲明屬于main包,并且包含一個(gè)無(wú)參數(shù)聲明且無(wú)結(jié)果聲明的main函數(shù),那么就是命令源碼文件。
當(dāng)需要模塊化編程時(shí),我們會(huì)將代碼拆分到多個(gè)文件下,不同的代碼包中。但無(wú)論怎樣,對(duì)于一個(gè)獨(dú)立的程序來(lái)說(shuō)命令源碼文件永遠(yuǎn)只會(huì)也只能有一個(gè)。如果有與命令源碼文件同包的源碼文件,那么他們也應(yīng)該聲明屬于main包。
3.命令源碼文件怎樣接收參數(shù)go語(yǔ)言標(biāo)準(zhǔn)庫(kù)中有一個(gè)代碼包專門用于接收和解析命令參數(shù)。這個(gè)代碼包的名字叫做flag。下面根據(jù)例子來(lái)進(jìn)行講解。
例子:package main
import ("flag" //導(dǎo)入所需的flag包"fmt")
var name string
func init() {flag.StringVar(&name, "name", "every one", "to say hello")//初始化flag,第一個(gè)參數(shù)用于儲(chǔ)存該命令參數(shù)的值的地址,第二個(gè)參數(shù)是為了指定命令參數(shù)名稱,第三個(gè)參數(shù)是為使用參數(shù)時(shí)的默認(rèn)值,第四個(gè)參數(shù)為說(shuō)明參數(shù)。此處還可以改為var name = flag.String("name","everyone","the greeting object")
}func main() {flag.Parse()//解析命令參數(shù)fmt.Println("hello world " + name)}
4.怎樣在運(yùn)行命令源碼文件時(shí)傳入?yún)?shù),以及怎樣查看參數(shù)使用說(shuō)明
運(yùn)行如下命令傳入?yún)?shù):go run test.go -name="Robert"運(yùn)行結(jié)果:Hello world Robert查看命令源碼文件的參數(shù)說(shuō)明 go run test.go --help結(jié)果:Usage of C:\Users\nshu\AppData\Local\Temp\go build740295486\b001\exe\test.exe:-name stringto say hello (default "every one")exit status 2第一行為go run臨時(shí)生成的可執(zhí)行文件的完整路徑。
5.怎樣自定義命令源碼文件的參數(shù)使用說(shuō)明自定義命令源碼文件的參數(shù)使用說(shuō)明有很多方法,在這舉幾個(gè)例子:
1.對(duì)變量flag.Usage重新賦值,該變量在聲明flag時(shí)就已經(jīng)被賦值了,在這里可以對(duì)它重新賦值。對(duì)flag.Usage的賦值必須在調(diào)用flag.Parse函數(shù)之前例子:
flag.Usage = func() {fmt.Printf("Usage of %s:\n", "question")flag.PrintDefaults()}
再輸入go run test.go --help之后輸出:
Usage of question:-name stringto say hello (default "every one")exit status 2
2.當(dāng)我們?cè)谡{(diào)用flag包中的一些函數(shù)(例如StringVar)的時(shí)候,實(shí)際上在調(diào)用flag.CommandLine變量的對(duì)應(yīng)方法,這時(shí)我們可以通過(guò)以下方法來(lái)定義參數(shù)使用說(shuō)明:func init() { flag.CommandLine= flag.NewFlagSet("", flag.ExitOnError)flag.CommandLine.Usage = func() {fmt.Printf("Usage of %s:\n", "question")flag.PrintDefaults()}flag.StringVar(&name, "name", "every one", "to say hello")}此時(shí)將flag.ExitOnError改為flag.PanicOnError此時(shí)就會(huì)產(chǎn)生另一種輸出效果。這兩個(gè)參數(shù)都是flag包中的常量。flag.ExitOnError的含義是,告訴命令參數(shù)容器,當(dāng)命令后跟--help或者參數(shù)不正確時(shí),打印命令參數(shù)使用說(shuō)明后以狀態(tài)碼2結(jié)束當(dāng)前程序。
flag.PanicOnError與之的區(qū)別是在最后跑出“運(yùn)行時(shí)錯(cuò)誤”
3.我們還可以自己創(chuàng)建一個(gè)私有的命令參數(shù)容器來(lái)代替flag.CommandLine
例子:package main
import ("flag""fmt""os")
var name stringvar nshu = flag.NewFlagSet("", flag.PanicOnError)
func init() {nshu.Usage = func() {fmt.Printf("Usage of %s:\n", "question")nshu.PrintDefaults()}nshu.StringVar(&name, "name", "every one", "to say hello")}func main() {// flag.Usage = func() {// fmt.Printf("Usage of %s:\n", "question")// flag.PrintDefaults()// }nshu.Parse(os.Args[1:]) //與之前flag下的Parse不一樣fmt.Println("hello world " + name)}這種定制并不會(huì)影響全局變量flag.CommandLine
轉(zhuǎn)載于:https://juejin.im/post/5b83e3ecf265da43682f6a10
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的go语言学习笔记(2)命令源码文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Xmind settings lower
- 下一篇: datatables[columns]