Golang fmt 包中的 print 是一個常用的 func
尤其要觀察某個數值或是狀態得時候非常好用
相關連結 Package fmt
print 得相關 func 有以下三個
- func Print(a ...interface{})(n int,err error)
- func Println(a ...interface{})(n int,err error)
- func Printf(format string,a ...interface{})(n int,err error)
回傳值
- n int : 代表在 Terminal 打印多少字符,由於打完一個變數它會多幫你家空白 所以你打印文字得到的數值會比你的問字長度多1
- err error : 發生錯誤時回傳的錯誤訊息,通常是不會有任何錯誤
操作符介紹
- General
- %v : 任何屬性都可印
- %+v : 打印 struct 顯示結構名稱
- %#v : 打印出 golang 相對表示方法
- %T : 打印屬性
- %% : 打印%文字
- 布林值
- %t : 打印布林值
- 文字相關
- %s : 輸出字串
- %q : 文字加上雙引號" "
- %x : 每個 char 兩位 byte 表示,英文小寫表示
- %X : 每個 char 兩位 byte 表示,英文大寫表示
- 整數
- %b : 二進位表示
- %c : unicode 相對應編碼
- %d : 十進位
- %o : 八進位
- %x : 十六進位 字母使用小寫表示 a-f
- %X : 十六進位 字母使用大寫表示 A-F
- %q : 轉文字加上單引號 ' '
- %U : unicode 格式 format: U+1234; same as "U+%04X"
- 浮點數
- %b : 無小數部分的,指數為二的冪的科學計數法
- %f : 打印浮點數
- %F : 與 %f 相同
- %e : 科學記號 英文字母小寫表示 e
- %E : 科學記號 英文字母大寫表示 E
- %g : 有指數的情況使用 %e 不然使用 %f
- %G : 有指數的情況使用 %E 不然使用 %F
- 指針
- %p : 十六進位表示前綴 0x
type Value struct {
String string
Integer int
Float float32
Boolean bool
Array []string
ArrayInt []int
Byte byte
Rune rune
Complex complex64
AsciiA int
}
func newValue() Value {
return Value{
String: "Hello World",
Integer: 8080,
Float: 99.99,
Boolean: true,
Array: []string{"Golang", "C", "C++"},
ArrayInt:[]int{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},
Byte: 0x07,
Rune: 0040007, //G
Complex: complex(1.2, 2),
AsciiA: 97,
}
}
- func Print(a ...interface{})(i int,err error)
普通的打印且不換行,效果如下func main(){ value := newValue() //初始化數值 fmt.Print("print value = ", value) fmt.Print("\n") // 使用 \n 換行 fmt.Print(value.String, "\t", value.String, "\n") //使用 \t 做一個 tab 空行 最後用 \n 換行 }
Terminal 顯示print value = {Hello World 8080 99.99 true [Golang C C++] 7 16391 (1.2+2i) 97} Hello World Hello World
可以看到不管是什麼型態的都可以幫你印出,這裡使用了兩個操作符號
- \t : tab 符號(空出 tab大小的空間)
- \n : 換行符號
- func Println(a ...interface{})(n int,err error)
打印完自動換行,效果如下可以看到每次打印完之後就會幫你換行,不需要自己在加上\nfunc main() { fmt.Println("println value = ", value) fmt.Println("println string = ", value.String) fmt.Println("println int = ", value.Integer) fmt.Println("println boolean = ", value.Boolean) fmt.Println("println float = ", value.Float) fmt.Println("println byte = ", value.Byte) fmt.Println("println rune = ", value.Rune) fmt.Println("println complex = ", value.Complex) fmt.Println("println AsciiA = ", value.AsciiA) }
Terminal 顯示println value = {Hello World 8080 99.99 true [Golang C C++] 7 16391 (1.2+2i) 97} println string = Hello World println int = 8080 println boolean = true println float = 99.99 println byte = 7 println rune = 16391 println complex = (1.2+2i) println AsciiA = 97
- func Printf(format string,a ...interface{})(n int,err error)
- 這是可以自訂打印格式的方法,有很多的操作符可以搭配
General:一般的輸出
- %v : 印出相對應型態數值
- %+v : 如有 struct 印出相關名稱
- %#v : 印出 golang 語法表示
func main() { value := newValue() //初始化數值 fmt.Println("\n[ Use v Printf content]") fmt.Printf("value = %v\n", value) fmt.Printf("string = %v\n", value.String) fmt.Printf("int = %v\n", value.Integer) fmt.Printf("boolean = %v\n", value.Boolean) fmt.Printf("array = %v\n", value.Array) fmt.Printf("array int = %v\n", value.ArrayInt) fmt.Printf("float = %v\n", value.Float) fmt.Printf("byte = %v\n", value.Byte) fmt.Printf("rune = %v\n", value.Rune) fmt.Printf("complex = %v\n", value.Complex) fmt.Println("\n[ Use +v Printf Type + content]") fmt.Printf("value = %+v\n", value) fmt.Printf("string = %+v\n", value.String) fmt.Printf("int = %+v\n", value.Integer) fmt.Printf("boolean = %+v\n", value.Boolean) fmt.Printf("array = %+v\n", value.Array) fmt.Printf("array int = %+v\n", value.ArrayInt) fmt.Printf("float = %+v\n", value.Float) fmt.Printf("byte = %+v\n", value.Byte) fmt.Printf("rune = %+v\n", value.Rune) fmt.Printf("complex = %+v\n", value.Complex) fmt.Println("\n[ Use #v Printf struceure type]") fmt.Printf("value = %#v\n", value) fmt.Printf("string = %#v\n", value.String) fmt.Printf("int = %#v\n", value.Integer) fmt.Printf("boolean = %#v\n", value.Boolean) fmt.Printf("array = %#v\n", value.Array) fmt.Printf("array int = %#v\n", value.ArrayInt) fmt.Printf("float = %#v\n", value.Float) fmt.Printf("byte = %#v\n", value.Byte) fmt.Printf("rune = %#v\n", value.Rune) fmt.Printf("complex = %#v\n", value.Complex) }
Terminal 顯示[ Use v Printf content] value = {Hello World 8080 99.99 true [Golang C C++] [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] 7 16391 (1.2+2i) 97} string = Hello World int = 8080 boolean = true array = [Golang C C++] array int = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] float = 99.99 byte = 7 rune = 16391 complex = (1.2+2i) [ Use +v Printf Type + content] value = {String:Hello World Integer:8080 Float:99.99 Boolean:true Array:[Golang C C++] ArrayInt:[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] Byte:7 Rune:16391 Complex:(1.2+2i) AsciiA:97} string = Hello World int = 8080 boolean = true array = [Golang C C++] array int = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] float = 99.99 byte = 7 rune = 16391 complex = (1.2+2i) [ Use #v Printf struceure type] value = main.Value{String:"Hello World", Integer:8080, Float:99.99, Boolean:true, Array:[]string{"Golang", "C", "C++"}, ArrayInt:[]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, Byte:0x7, Rune:16391, Complex:(1.2+2i), AsciiA:97} string = "Hello World" int = 8080 boolean = true array = []string{"Golang", "C", "C++"} array int = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} float = 99.99 byte = 0x7 rune = 16391 complex = (1.2+2i)
文字相關:
- %s : 輸出文字
- %q : 輸出文字加上雙引號
- %x : 每個 char 兩位 byte 表示,英文小寫表示
- %X : 每個 char 兩位 byte 表示,英文大寫表示
可以看到使用 %s 打印型態不為 string 的數值出現了警告 除了使用 %v 相關操作符可以打印任何型態數值以外func main() { value := newValue() //初始化數值 fmt.Println("\n[ Use s Printf string]") fmt.Printf("value = %s\n", value) fmt.Printf("string = %s\n", value.String) fmt.Printf("array = %s\n", value.Array) fmt.Println("\n[ Use q Printf string]") fmt.Printf("value = %q\n", value) fmt.Printf("string = %q\n", value.String) fmt.Printf("array = %q\n", value.Array) fmt.Println("\n[ Use x Printf string]") fmt.Printf("value = %x\n", value) fmt.Printf("string = %x\n", value.String) fmt.Printf("array = %x\n", value.Array) fmt.Println("\n[ Use X Printf string]") fmt.Printf("value = %X\n", value) fmt.Printf("string = %X\n", value.String) fmt.Printf("array = %X\n", value.Array) }
Terminal 顯示[ Use s Printf string] value = {Hello World %!s(int=8080) %!s(float32=99.99) %!s(bool=true) [Golang C C++] [%!s(int=1) %!s(int=2) %!s(int=3) %!s(int=4) %!s(int=5) %!s(int=6) %!s(int=7) %!s(int=8) %!s(int=9) %!s(int=10) %!s(int=11) %!s(int=12) %!s(int=13) %!s(int=14) %!s(int=15)] %!s(uint8=7) %!s(int32=16391) %!s(complex64=(1.2+2i)) %!s(int=97)} string = Hello World array = [Golang C C++] [ Use q Printf string] value = {"Hello World" 'ᾐ' %!q(float32=99.99) %!q(bool=true) ["Golang" "C" "C++"] ['\x01' '\x02' '\x03' '\x04' '\x05' '\x06' '\a' '\b' '\t' '\n' '\v' '\f' '\r' '\x0e' '\x0f'] '\a' '䀇' %!q(complex64=(1.2+2i)) 'a'} string = "Hello World" array = ["Golang" "C" "C++"] [ Use x Printf string] value = {48656c6c6f20576f726c64 1f90 %!x(float32=99.99) %!x(bool=true) [476f6c616e67 43 432b2b] [1 2 3 4 5 6 7 8 9 a b c d e f] 7 4007 %!x(complex64=(1.2+2i)) 61} string = 48656c6c6f20576f726c64 array = [476f6c616e67 43 432b2b] [ Use X Printf string] value = {48656C6C6F20576F726C64 1F90 %!X(float32=99.99) %!X(bool=true) [476F6C616E67 43 432B2B] [1 2 3 4 5 6 7 8 9 A B C D E F] 7 4007 %!X(complex64=(1.2+2i)) 61} string = 48656C6C6F20576F726C64 array = [476F6C616E67 43 432B2B]
如果使用操作符打印不相關數值就會出現 %!verbs(type=value) 的警告
關於其他用法請參考以下連結
程式碼:Github
0 意見:
張貼留言