標籤:
Package fmt
fmt 包實現了格式化I/O函數,類似於C的 printf 和 scanf. 格式“預留位置”衍生自C,但比C更簡單。
列印預留位置一般
預留位置 |
功能 |
%v |
相應值的預設格式。在列印結構體時,“加號”標記(%+v)會添加欄位名 |
%#v |
相應值的Go文法表示 |
%T |
相應值的類型的Go文法表示 |
%% |
字面上的百分比符號,並非值的預留位置 |
布爾
預留位置 |
功能 |
%t |
單詞 true 或 false |
整數
預留位置 |
功能 |
%b |
二進位表示 |
%c |
相應Unicode碼點所表示的字元 |
%d |
十進位表示 |
%o |
八進位表示 |
%q |
單引號圍繞的字元字面值,由Go文法安全地轉義 |
%x |
十六進位表示,字母形式為小寫 a-f |
%X |
十六進位表示,字母形式為大寫 A-F |
%U |
Unicode格式:U+1234,等同於 U+%04X |
浮點數及其複合構成
預留位置 |
功能 |
%b |
無小數部分的,指數為二的冪的科學計數法,與strconv.FormatFloat的 ‘b’ 轉換格式一致。例如 -123456p-78 |
%e |
科學計數法,例如 -1234.456e+78 |
%E |
科學計數法,例如 -1234.456E+78 |
%f |
有小數點而無指數,例如 123.456 |
%g |
根據情況選擇 %e 或 %f 以產生更緊湊的(無末尾的0)輸出 |
%G |
根據情況選擇 %E 或 %f 以產生更緊湊的(無末尾的0)輸出 |
字串與位元組切片
預留位置 |
功能 |
%s |
字串或切片的無解譯位元組 |
%q |
雙引號圍繞的字串,由Go文法安全地轉義 |
%x |
十六進位,小寫字母,每位元組兩個字元 |
%X |
十六進位,大寫字母,每位元組兩個字元 |
指標
注意:
這裡沒有 ‘u’ 標記。若整數為無符號類型,他們就會被列印成無符號的。類似地, 這裡也不需要指定運算元的大小(int8,int64)。
寬度與精度的控制格式以Unicode碼點為單位。(這點與C的 printf 不同, 它以位元組數為單位。)二者或其中之一均可用字元 ‘*’ 表示, 此時它們的值會從下一個運算元中擷取,該運算元的類型必須為 int。
對數值而言,寬度為該數值佔用地區的最小寬度;精度為小數點之後的位元。 但對於 %g/%G 而言,精度為所有數位總數。例如,對於123.45,格式 %6.2f 會列印123.45,而 %.4g 會列印123.5。%e 和 %f 的預設精度為6;但對於 %g 而言, 它的預設精度為確定該值所必須的最小位元。
對大多數值而言,寬度為輸出的最小字元數,如果必要的話會為已格式化的形式填充空格。 對字串而言,精度為輸出的最大字元數,如果必要的話會直接截斷。
其它標記
+
總列印數值的加號或減號;對於%q(%+q)保證只輸出ASCII編碼的字元。
-
在右側而非左側填充空格(靠左對齊該地區)
備用格式:
- 為八進位添加前置 0(%#o)
- 為十六進位添加前置 0x(%#x)或 0X(%#X)
- 為 %p(%#p)去掉前置0x
- 對於 %q,若 strconv.CanBackquote 返回 true,就會列印原始(即反引號圍繞的)字串
- 如果是可列印字元,%U(%#U)會寫出該字元的Unicode編碼形式(如字元 x 會被列印成 U+0078 ‘x')
- ’ ‘ (空格)為數值中省略的加號或減號留出空白(% d)
- 以十六進位(% x, % X)列印字串或切片時,在位元組之間用空格隔開
- 0 填充前置的0而非空格
- 對於數字,這會將填充移到加號或減號之後
- 標記有時會被預留位置忽略,所以不要指望它們(例如十進位沒有備用格式,因此 %#d 與 %d 的行為相同)
- 對於每一個 Printf 類的函數,都有一個 Print 函數,該函數不接受任何格式化, 它等價於對每一個運算元都應用 %v。另一個變參函數 Println 會在運算元之間插入空白, 並在末尾追加一個分行符號。
- 不考慮預留位置的話,如果運算元是介面值,就會使用其內部的具體值,而非介面本身。 因此:
var i interface{} = 23fmt.Printf("%v\n", i)
會列印 23。
戳我查看首頁
Go標準庫 fmt