1. 程式人生 > >服務計算:Go語言實現selpg

服務計算:Go語言實現selpg

1.專案內容

使用Golang開發Linux命令列中的selpg

2.設計說明

2.1引入所需要的包

import (
	"bufio"
	"fmt"
	"io"
	"os"
	"os/exec"
	flag "github.com/spf13/pflag"
)

io,實現了一系列非平臺相關的 IO 相關介面和實現,比如提供了對 os 中系統相關的 IO 功能的封裝。我們在進行流式讀寫(比如讀寫檔案)時,通常會用到該包。

os/exec,執行外部命令,它包裝了 os.StartProcess 函式以便更容易對映到 stdin 和 stdout,並且利用 pipe 連線 I/O。

bufio,在 io 的基礎上提供了快取功能。在具備了快取功能後, bufio 可以比較方便地提供 ReadLine 之類的操作。

os,提供了對作業系統功能的非平臺相關訪問介面。介面為Unix風格。提供的功能包括檔案操作、程序管理、訊號和使用者賬號等。

fmt,實現格式化的輸入輸出操作,其中的 fmt.Printf() 和 fmt.Println() 是開發者使用最為頻繁的函式。

pflag,提供命令列引數的規則定義和傳入引數解析的功能。絕大部分的 CLI 程式都需要用到這個包。

2.2創立結構體

type sp_args struct {
	start_page  int //開始頁碼 
	end_page    int //結束頁碼
	in_filename string // 檔名
	page_len    int // 每一頁的大小
page_type int // 頁型別 print_dest string // 列印目的地 }

2.3main函式

func main() {
	sa := sp_args{-1, -1, "", 3, 'l', ""} //建立結構體資料
	progname = os.Args[0] 
	process_args(len(os.Args), os.Args, &sa)
	process_input(sa)
}

2.4process_args函式

主要是用於處理輸入時候的各種錯誤,比如起始頁碼是負數,終止頁碼小於起始頁碼等情況,增加程式的健壯性。詳見程式碼

2.5process_input函式

用來對檔案的內容進行處理,根據字尾引數的型別完成操作。詳見程式碼

3.程式測試

test.txt為準備好的資料檔案,內容為數字001-050,每個一行。程式預設3行為一頁。 out.txt與error.txt為空白檔案

3.1 selpg -s1 -e5 test.txt

把test.txt的前5頁內容輸出到螢幕 顯示前五頁內容

3.2 selpg -s1 -e5 < test.txt

selpg 讀取標準輸入,而標準輸入已被 shell/核心重定向為來自“test.txt”而不是顯式命名的檔名引數。輸入的前5頁被寫至螢幕。

在這裡插入圖片描述

3.3 hello | selpg -s1 -e2

hello程式的標準輸出被 shell/核心重定向至 selpg 的標準輸入。將第 1 頁到第 2 頁寫至 selpg 的標準輸出(螢幕)。 在這裡插入圖片描述

3.4 selpg -s1 -e6 -l2 test.txt > out.txt

selpg 將前6頁(2行為一頁)寫至標準輸出;標準輸出被 shell/核心重定向至“out.txt”。 在這裡插入圖片描述

3.5 selpg -s3 -e5 -l15 test.txt 2>error.txt

selpg 將第 3 頁到第 5 頁(15行為一頁)寫至標準輸出(螢幕);所有的錯誤訊息被 shell/核心重定向至“error.txt”。請注意:在“2”和“>”之間不能有空格;這是 shell 語法的一部分 在這裡插入圖片描述

3.6 selpg -s3 -e5 -l15 test.txt >out.txt 2>error.txt

selpg 將第 3 頁到第 5 頁(15行為一頁)寫至標準輸出(標準輸出被 shell/核心重定向至“out.txt”);所有的錯誤訊息被 shell/核心重定向至“error.txt”。 在這裡插入圖片描述

4.參考資料

最後悄悄給上自己的github