服務計算三——Centos下使用Golang開發Selpg
阿新 • • 發佈:2018-12-14
一、實驗前準備
參考資料:
這些資料能讓我們對命令列主要涉及內容能有比較好的理解,雖然我看完了之後,我也是一頭霧水…… 接下來我們需要安裝Pflag,這個很簡單,只需要在gowork的pkg資料夾下使用命令:
go get github.com/spf13/pflag
然後我們可以開始正式的編碼了。
二、編碼設計
我的程式碼主要分為四個大函式:
- main函式
- ReceiveArgs函式
- CheckArgs函式
- HandleArgs函式
1、main函式
這個函式是最簡單的,因為不需要什麼實現,只需要接受引數,然後呼叫後面三個具體實現的函式。 具體的程式碼如下:
func main() { args := new(selpg_args) ReceiveArgs(args) CheckArgs(args) HandleArgs(args) }
2、ReceiveArgs函式
這個函式主要功能是將得到的引數進行分割,用到的函式是pflag這個庫中的各種函式,其中,這裡對每個沒有賦值的引數,定義了預設的值。 具體的實現程式碼如下:
func ReceiveArgs(args *selpg_args) { pflag.Usage = usage; //add error information pflag.IntVar(&(args.startPage), "s", -1, "start page") pflag.IntVar(&(args.endPage), "e", -1, "end page") pflag.IntVar(&(args.pageLen), "l", 72, "page len") pflag.StringVar(&(args.printDestination), "d", "", "print destionation") pflag.BoolVar(&(args.pageType), "f", false, "type of print") pflag.Parse() //parse for input file names othersArg := pflag.Args() if len(othersArg) > 0 { args.inFile = othersArg[0] } else { args.inFile = "" } }
3、CheckArgs函式
這部分函式主要是完成對傳入的引數的檢查。 需要檢查的部分是:
- 是否傳入了開始頁面和結束頁面這兩個引數;- 開始頁面和結束頁面是否有效;- 檢查頁面的長度是否有效。 具體的實現程式碼如下:
func CheckArgs(args *selpg_args) { if args.startPage == -1 || args.endPage == -1 { os.Stderr.Write([]byte("You should input --s --e at least\n")) pflag.Usage() os.Exit(0) } if args.startPage < 1 || args.startPage > (math.MaxInt32-1) { os.Stderr.Write([]byte("Invalid start page\n")) pflag.Usage() os.Exit(1) } if args.endPage < 1 || args.endPage > (math.MaxInt32-1) || args.endPage < args.startPage { os.Stderr.Write([]byte("Invalid end page\n")) pflag.Usage() os.Exit(2) } if args.pageLen < 1 || args.pageLen > (math.MaxInt32-1) { os.Stderr.Write([]byte("Invalid page length\n")) pflag.Usage() os.Exit(3) } }
4、HandleArgs函式
這個函式的實現主要分成了以下幾步:
- 初始化Reader,當沒有輸入的檔案路徑的時候,我們選擇標準輸入。- 初始化Writer,當沒有輸出的檔案路徑的時候,我們選擇標準輸出;當有路徑的時候,使用管道輸出。- 處理其他的引數:如-d -l -f -l等。