go bufio 、os 包

程序使用短變量聲明建立bufio.Scanner類型的變量inputpython

input := bufio.NewScanner(os.Stdin)

該變量從程序的標準輸入中讀取內容。每次調用input.Scan(),即讀入下一行,並移除行末的換行符;讀取的內容能夠調用input.Text()獲得。Scan函數在讀到一行時返回true,再也不有輸入時返回false程序員

相似於C或其它語言裏的printf函數,fmt.Printf函數對一些表達式產生格式化輸出。該函數的首個參數是個格式字符串,指定後續參數被如何格式化。各個參數的格式取決於「轉換字符」(conversion character),形式爲百分號後跟一個字母。舉個例子,%d表示以十進制形式打印一個整型操做數,而%s則表示把字符串型操做數的值展開。編程

Printf有一大堆這種轉換,Go程序員稱之爲動詞(verb)。下面的表格雖然遠不是完整的規範,但展現了可用的不少特性:數組

%d          十進制整數
%x, %o, %b  十六進制,八進制,二進制整數。
%f, %g, %e  浮點數: 3.141593 3.141592653589793 3.141593e+00
%t          布爾:true或false
%c          字符(rune) (Unicode碼點)
%s          字符串
%q          帶雙引號的字符串"abc"或帶單引號的字符'c'
%v          變量的天然形式(natural format)
%T          變量的類型
%%          字面上的百分號標誌(無操做數)

dup1的格式字符串中還含有製表符\t和換行符\n。字符串字面上可能含有這些表明不可見字符的轉義字符(escape sequences)。默認狀況下,Printf不會換行。按照慣例,以字母f結尾的格式化函數,如log.Printffmt.Errorf,都採用fmt.Printf的格式化準則。而以ln結尾的格式化函數,則遵循Println的方式,以跟%v差很少的方式格式化參數,並在最後添加一個換行符。(譯註:後綴fformatlnline。)編程語言

不少程序要麼從標準輸入中讀取數據,如上面的例子所示,要麼從一系列具名文件中讀取數據。dup程序的下個版本讀取標準輸入或是使用os.Open打開各個具名文件,並操做它們。函數

OS操作系統

os包以跨平臺的方式,提供了一些與操做系統交互的函數和變量。程序的命令行參數可從os包的Args變量獲取;os包外部使用os.Args訪問該變量。命令行

os.Args變量是一個字符串(string)的切片(slice)(譯註:slice和Python語言中的切片相似,是一個簡版的動態數組),切片是Go語言的基礎概念,稍後詳細介紹。如今先把切片s看成數組元素序列, 序列的長度動態變化, 用s[i]訪問單個元素,用s[m:n]獲取子序列(譯註:和python裏的語法差很少)。序列的元素數目爲len(s)。和大多數編程語言相似,區間索引時,Go言裏也採用左閉右開形式, 即,區間包括第一個索引元素,不包括最後一個, 由於這樣能夠簡化邏輯。(譯註:好比a = [1, 2, 3, 4, 5], a[0:3] = [1, 2, 3],不包含最後一個元素)。好比s[m:n]這個切片,0 ≤ m ≤ n ≤ len(s),包含n-m個元素。code

os.Args的第一個元素,os.Args[0], 是命令自己的名字;其它的元素則是程序啓動時傳給它的參數。s[m:n]形式的切片表達式,產生從第m個元素到第n-1個元素的切片,下個例子用到的元素包含在os.Args[1:len(os.Args)]切片中。若是省略切片表達式的m或n,會默認傳入0或len(s),所以前面的切片能夠簡寫成os.Args[1:]。orm

相關文章
相關標籤/搜索