Go標準庫 fmt

來源:互聯網
上載者:User

標籤:

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 十六進位,大寫字母,每位元組兩個字元
指標
預留位置 功能
%p 十六進位表示,首碼 0x

注意:

  1. 這裡沒有 ‘u’ 標記。若整數為無符號類型,他們就會被列印成無符號的。類似地, 這裡也不需要指定運算元的大小(int8,int64)。

  2. 寬度與精度的控制格式以Unicode碼點為單位。(這點與C的 printf 不同, 它以位元組數為單位。)二者或其中之一均可用字元 ‘*’ 表示, 此時它們的值會從下一個運算元中擷取,該運算元的類型必須為 int。

  3. 對數值而言,寬度為該數值佔用地區的最小寬度;精度為小數點之後的位元。 但對於 %g/%G 而言,精度為所有數位總數。例如,對於123.45,格式 %6.2f 會列印123.45,而 %.4g 會列印123.5。%e 和 %f 的預設精度為6;但對於 %g 而言, 它的預設精度為確定該值所必須的最小位元。

  4. 對大多數值而言,寬度為輸出的最小字元數,如果必要的話會為已格式化的形式填充空格。 對字串而言,精度為輸出的最大字元數,如果必要的話會直接截斷。

其它標記

+ 總列印數值的加號或減號;對於%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。

  • 若一個運算元實現了 Formatter 介面,該介面就能更好地用於控制格式化。
  • 若其格式(它對於 Println 等函數是隱式的 %v)對於字串是有效 (%s %q %v %x %X),以下兩條規則也適用:

    • 若一個運算元實現了 error 介面,Error 方法就能將該對象轉換為字串, 隨後會根據預留位置的需要進行格式化。

    • 若一個運算元實現了 String() string 方法,該方法能將該對象轉換為字串, 隨後會根據預留位置的需要進行格式化。

戳我查看首頁

Go標準庫 fmt

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.