在日常使用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介面的型別都支援...