1. 程式人生 > >服務計算三——Centos下使用Golang開發Selpg

服務計算三——Centos下使用Golang開發Selpg

一、實驗前準備

參考資料:

這些資料能讓我們對命令列主要涉及內容能有比較好的理解,雖然我看完了之後,我也是一頭霧水…… 接下來我們需要安裝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等。

三、實驗結果

1、處理命令:selpg --s=1 --e=1 in.txt

image1

2、處理命令:selpg --s=1 --e=1 < in.txt

image2

3、處理命令:selpg --s=1 --e=1 in.txt > out.txt

image3

4、處理命令:selpg --s=1 --e=1 in.txt 2> error.txt

image4

5、處理命令:selpg --s=1 --e=1 --l=6 in.txt

image5

6、使用cat指令

image6

7、使用ps指令

image7