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