服務計算: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