概要
日常工作有時候需要編寫命令行工具檀轨,相比Python這樣的腳本語言瓢宦,Golang可以直接編譯成二進(jìn)制文件,運行時不用依賴于環(huán)境否过。同時Golang也支持交叉編譯,可以在Mac惭蟋,Linux等多個環(huán)境下執(zhí)行苗桂。
開發(fā)準(zhǔn)備
Golang需要我們安裝Go的開發(fā)環(huán)境。當(dāng)前我們可以去 https://golang.google.cn/ 下載最新的Golang環(huán)境告组。
安裝了Golang環(huán)境后煤伟,可能因為國內(nèi)網(wǎng)絡(luò)的原因無法下載第三方的包。比較好的方法是借助Go的proxy:https://goproxy.io/
編譯運行
使用 go build
來編譯源文件木缝,使用 go run
來運行源文件便锨。
例如,我們要編譯 main.go 文件
go build main.go
依賴管理
Golang從1.11開始有了官方的依賴管理工具Go Modules
我碟,詳細(xì)的入門可以參考這里. 在工程目錄下建立一個go.mod文件來管理這個項目的依賴放案。
一些簡單的規(guī)則
golang的模塊有package
的概念, 同一個package的文件是具有可見性。
源文件命名的規(guī)則:golang的源文件大都是小寫蛇形命名, 比如 hello.go, 而 hello_test.go 則是hello.go的測試代碼矫俺。
函數(shù)規(guī)則:文件中的函數(shù)以駝峰式命名吱殉,首字母大寫的函數(shù)說明是供外部模塊調(diào)用的。
常用的模塊
如果你要編寫的命令行工具需要借助其他的shell命令來實現(xiàn)厘托,就需要用到exec模塊
創(chuàng)建命令行工具常常會需要對命令行的參數(shù)進(jìn)行解析友雳,需要用到 flag模塊
因為有些處理比較耗時,所以也可能會需要使用Golang的goroutine(協(xié)程)特性催烘。
其他編寫命令行工具時常用的第三方模塊:
- 終端彩色化 https://github.com/logrusorgru/aurora
- 終端進(jìn)度條 https://github.com/gosuri/uiprogress
- 菜單 https://github.com/manifoldco/promptui
- 下載 https://golangcode.com/download-a-file-from-a-url/122724754
其他tips
當(dāng)使用 main.go 調(diào)用其他文件時沥阱,會發(fā)現(xiàn)函數(shù)找不到的問題.
如果使用命令行缎罢,可以使用go install
代替go build
就可以編譯了伊群。
如果需要使用goland
,可以將 run 和 debug 配置中的 [Run kind] 由 File 改變成 Directory策精,并且填上 Directory 就可以了舰始。