Go中的fmt幾種輸出的區別和格式化方式

2022-06-26 21:36:09 字數 4010 閱讀 3762

在日常使用fmt包的過程中,各種眼花繚亂的print是否讓你莫名的不知所措呢,更讓你茫然的是各種格式化的佔位符。。簡直就是噩夢。今天就讓我們來征服格式化輸出,做乙個會輸出的goer。

fmt.print有幾個變種:

print:   輸出到控制台,不接受任何格式化操作

println: 輸出到控制台並換行

printf : 只可以列印出格式化的字串。只可以直接輸出字串型別的變數(不可以輸出別的型別)

sprintf:格式化並返回乙個字串而不帶任何輸出

fprintf:來格式化並輸出到 io.writers 而不是 os.stdout

1. 通用的佔位符
%v     值的預設格式。

%+v 類似%v,但輸出結構體時會新增欄位名

%#v  相應值的go語法表示

%t 相應值的型別的go語法表示

%% 百分號,字面上的%

,非佔位符含義

預設格式%v下,對於不同的資料型別,底層會去呼叫預設的格式化方式:

bool:                    %t 

int, int8 etc.: %d

uint, uint8 etc.: %d, %x if printed with %#v

float32, complex64, etc: %g

string: %s

chan: %p

pointer: %p

如果是複雜物件的話,按照如下規則進行列印:

struct:             

array, slice: [elem0 elem1 ...]

maps: map[key1:value1 key2:value2]

pointer to above: &{}, &, &map

示例:

package main

import

("fmt"

"strconv"

)type user struct

func

(user)

getuser

(user user)

string

func

main()

//go預設形式

fmt.

printf

("%v"

,user)

fmt.

println()

//型別+值物件

fmt.

printf

("%#v"

,user)

fmt.

println()

//輸出欄位名和字段值形式

fmt.

printf

("%+v"

,user)

fmt.

println()

//值型別的go語法表示形式

fmt.

printf

("%t"

,user)

fmt.

println()

fmt.

printf

("%%")}

輸出:main.user

main.user

%

2. 常用型別

2.1 整數型別:

%b     二進位制表示 

%c 相應unicode碼點所表示的字元

%d 十進位制表示

%o 八進位制表示

%q 單引號圍繞的字元字面值,由go語法安全地轉義

%x 十六進製制表示,字母形式為小寫 a-f

%x 十六進製制表示,字母形式為大寫 a-f

%u unicode格式:123,等同於 "u+007b"

示例:

package main

import

("fmt"

)func

main()

輸出:1111011

輸出:6645747581470399p-

191.267576e+10

1.267576e+10

12675757563.534544

1.2675757563534544e+10

1.2675757563534544e+10

2.3 布林型
%t   true 或 false
2.4 字串
%s     字串或切片的無解譯位元組 

%q 雙引號圍繞的字串,由go語法安全地轉義

%x 十六進製制,小寫字母,每位元組兩個字元

%x 十六進製制,大寫字母,每位元組兩個字元

示例:

package main

import

("fmt"

)func

main()

fmt.

printf

("%s"

,"i'm a girl"

) fmt.

println()

fmt.

printf

("%q"

,"i'm a girl"

) fmt.

println()

fmt.

printf

("%x"

,"i'm a girl"

) fmt.

println()

fmt.

printf

("%x"

,"i'm a girl"

) fmt.

println()

}輸出:

i'm a girl

"i'm a girl"

49276d2061206769726c

49276d2061206769726c

2.5 指標
%p     十六進製制表示,字首 0x
示例:

package main

import

("fmt"

)func

main()

輸出:0xc00000c0a8

指標的位址

2.6 其他標誌
+     總列印數值的正負號;對於%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而非空格;對於數字,這會將填充移到正負號之後

示例:

func

main()

輸出:323

duduud

ffff

nnnnn

aaaa 10

aaaa

10

2.7 格式化錯誤的提示

格式化錯誤.所有的錯誤都始於「%!」,有時緊跟著單個字元(佔位符),並以小括號括住的描述結尾。

func

main()

Go中的make和new的區別

make用於內建型別 map slice 和channel 的記憶體分配。new用於各種型別的記憶體分配。內建函式new本質上說跟其它語言中的同名函式功能一樣 new t 分配了零值填充的t型別的記憶體空間,並且返回其位址,即乙個 t型別的值。用go的術語說,它返回了乙個指標,指向新分配的型別t的零...

JSTL中的fmt標籤學習

fmt標籤庫分為國際化和格式化兩大類 先說格式化標籤 以及 格式化數字 屬性 value 需要格式化的值,可以為el表示式.type 格式化的型別,可能值包括 currency 貨幣 number 數字 和percent 百分比 pattern 格式化模式,00 0 00.0 23,456.79,0...

golang中的標準庫fmt

fmt.fprintln os.stdout,向標準輸出寫入內容 0644 擁有者6讀寫許可權,組使用者4讀許可權,其它使用者4讀許可權 if err nil name 枯藤 fmt.fprintf fileobj,在檔案中寫入資訊 s n name 注意 只要滿足io.writer介面的型別都支援...