格式化輸出函數
func Print(a ...interface{}) (n int, err error)
Print採用默認格式將其參數格式化並寫入標準輸出。如果兩個相鄰的參數都不是字符串,會在它們的輸出之間添加空格,返回寫入的字節數和遇到的任何錯誤。
func Printf(format string, a ...interface{}) (n int, err error)
Printf根據format參數生成格式化的字符串並寫入標準輸出,返回寫入的字節數和遇到的任何錯誤。
func Println(a ...interface{}) (n int, err error)
Println採用默認格式將其參數格式化並寫入標準輸出。總是會在相鄰參數的輸出之間添加空格並在輸出結束後添加換行符,返回寫入的字節數和遇到的任何錯誤。
區別:
- Println :可以打印出字符串,和變量
- Printf : 只可以打印出格式化的字符串,可以輸出字符串類型的變量,不可以輸出整形變量和整形
通用:
%v 相應值的默認格式 Printf("%v",person ) {zhangsan}
%+v 類似%v,但輸出結構體時會添加字段名式 Printf("%+v",person ) {Name:zhangsan}
%#v 相應值的Go語法表示 Printf("#v",person ) main.Person={zhangsan}
%T 相應值的類型的Go語法表示 Printf("%T",person ) main.Person
%% 字面上的百分號,並非值的佔位符 Printf("%%") %
布爾值:
%t 單詞true或false Printf("%t",true) true
整數:
%b 二進制表示 Printf("%b",5) 101
%c 該值對應的unicode碼值 Printf("%c",0x4E2d) 中
%d 十進制表示 Printf("%d",0x12) 18
%o 八進制表示 Printf("%o",10) 12
%q 單引號圍繞的字符字面值,由Go語法安全的轉譯 Printf("%q",0x4E2d) '中'
%x 十六進制表示,字母形式爲小寫a-f Printf("%x",13) d
%X 十六進制表示,字母形式爲大寫A-F Printf("%X",13) D
%U 表示爲Unicode格式:U+1234,等價於"U+%04X" Printf("%U",0x4E2d) U+4E2D
浮點數與複數的兩個組分:
%b 無小數部分、指數爲二的冪的科學計數法,與strconv.FormatFloat的'b'轉換格式一致。 Printf("%b",10.20) 5742089524897382p-49
%e 科學計數法,如-1234.456e+78 Printf("%e",10.20) 1.020000e+01
%E 科學計數法,如-1234.456E+78 Printf("%E",10.20) 1.020000E+01
%f 有小數部分但無指數部分,如123.456 Printf("%f",10.20) 10.200000
%g 根據實際情況採用%e或%f格式(以獲得更簡潔、準確的輸出) Printf("%g",10.20) 10.2
%G 根據實際情況採用%E或%F格式(以獲得更簡潔、準確的輸出) Printf("%G",10.20) (10.2+2i)
字符串和[]byte:
%s 輸出字符串表示(string類型或[]byte) Printf("%s",[]byte("Go語言")) Go語言
%q 雙引號圍繞的字符串,由Go語法安全的轉譯 Printf("%q","Go語言") "Go語言"
%x 十六進制,小寫字母,每字節兩個字符 Printf("%x","golang") 676f6c616e67
%X 十六進制,大寫字母,每字節兩個字符 Printf("%X","golang") 676F6C616E67
指針:
%P 十六進制表示,前綴 0x Printf("%p",&person) 0xc0420341c0
其他:
+ 總是輸出數值的正負號;對%q(%+q)會生成全部是ASCII字符的輸出(通過轉義) Printf("%+q","中文") "\u4e2d\u6587"
- 在輸出右邊填充空白而不是默認的左邊(即從默認的右對齊切換爲左對齊);
# 切換格式:八進制數前加0(%#o) Printf("%#0",46)
十六進制數前加0x(%#x)或0X(%#X) Printf("%#x",46) 0x2e
指針去掉前面的0x(%#p);) fmt.Printf("%#p",&person) c0420441b0
對%q(%#q),如果strconv.CanBackquote返回真會輸出反引號括起來的未轉義字符串; Printf("%#q",'中') '中'
對%U(%#U),如果字符是可打印的,會在輸出Unicode格式、空格、單引號括起來的go字面值; Printf("%#U",'中') U+4E2D '中'
' ' (空格)爲數值中省略的正負號流出空白(% d); Printf("% d",16) 16
以十六進制(% x,% X)打印字符串或切片時,在字節之間用空格隔開 Printf("% x","abc") 61 62 63
0 使用0而不是空格填充,對於數值類型會把填充的0放在正負號後面
實例
package main
import "fmt"
func main() {
type Person struct {
Name string
}
var people = Person{Name: "mark"}
//1.普通佔位符
//%v(相應值的默認格式)
fmt.Printf("%v", people) //{mark}
//%+v(打印結構體時,會添加字段名)
fmt.Printf("%+v", people) //{Name:mark}
//%#v(相應值的Go語法表示)
fmt.Printf("%#v", people) //main.Person{Name:"mark"}
//%T(相應值的類型的Go語法表示)
fmt.Printf("%T", people) //main.Person
//%%(字面上的百分號,並非值的佔位符)
fmt.Printf("%%") //%
//2.布爾佔位符
//%t(true 或 false)
fmt.Printf("%t", true) //true
//3.整數佔位符
//%b(二進制表示)
fmt.Printf("%b", 5) //101
//%c(相應Unicode碼點所表示的字符)
fmt.Printf("%c", 0x4E2D) //中
//%d(十進制表示)
fmt.Printf("%d", 0x12) //18
//%o(八進制表示)
fmt.Printf("%o", 10) //12
//%q(單引號圍繞的字符字面值,由Go語法安全地轉義)
fmt.Printf("%q", 0x4E2D) //'中'
//%x(十六進制表示,字母形式爲小寫a-f)
fmt.Printf("%x", 13) //d
//%X(十六進制表示,字母形式爲小寫A-F)
fmt.Printf("%X", 13) //D
//%U(Unicode格式:U+1234,等同於 "U+%04X")
fmt.Printf("%U", 0x4E2D) //U+4E2D
//4.浮點數和複數的組成部分
//%b(無小數部分的,指數爲二的冪的科學計數法)
fmt.Printf("%b", 10.2) //5742089524897382p-49
//%e(科學計數法,例如 -1234.456e+78)
fmt.Printf("%e", 10.2) //1.020000e+01
//%E(科學計數法,例如 -1234.456E+78)
fmt.Printf("%E", 10.2) //1.020000E+01
//%f(有小數點而無指數,例如123.456)
fmt.Printf("%f", 10.2) //10.200000
//%g(根據情況選擇%e或%f以產生更緊湊的(無末尾的0))
fmt.Printf("%g", 10.20) //10.2
//%G(根據情況選擇%E或%f以產生更緊湊的(無末尾的0))
fmt.Printf("%G", 10.20+2i) //(10.2+2i)
//5.字符串與字節切片
//%s(輸出字符串表示(string類型或[]byte))
fmt.Printf("%s", []byte("Go語言")) //Go語言
//%q(雙引號圍繞的字符串,由Go語法安全地轉義)
fmt.Printf("%q", "Go語言") //"Go語言"
//%x(十六進制,小寫字母,每字節兩個字符)
fmt.Printf("%x", "golang") //676f6c616e67
//%X(十六進制,大寫字母,每字節兩個字符)
fmt.Printf("%X", "golang") //676F6C616E67
//6.指針
//%p(十六進制表示,前綴0x)
fmt.Printf("%p", &people) //0xc0420421d0
}
參考連接
https://www.cnblogs.com/Survivalist/articles/10287297.html
http://static.markbest.site/blog/88.html