Now you can Subscribe using RSS

Submit your Email

2017/10/29

Golang fmt print 使用

asd
Golang fmt 包中的 print 是一個常用的 func
尤其要觀察某個數值或是狀態得時候非常好用
相關連結 Package fmt
print 得相關 func 有以下三個
  1. func Print(a ...interface{})(n int,err error)
  2. func Println(a ...interface{})(n int,err error)
  3. func Printf(format string,a ...interface{})(n int,err error)

回傳值

  • n int :
  • 代表在 Terminal 打印多少字符,由於打完一個變數它會多幫你家空白 所以你打印文字得到的數值會比你的問字長度多1
  • err error :
  • 發生錯誤時回傳的錯誤訊息,通常是不會有任何錯誤

操作符介紹


  1. General
    • %v : 任何屬性都可印
    • %+v : 打印 struct 顯示結構名稱
    • %#v : 打印出 golang 相對表示方法
    • %T : 打印屬性
    • %% : 打印%文字
  2. 布林值
    • %t : 打印布林值
  3. 文字相關
    • %s : 輸出字串
    • %q : 文字加上雙引號" "
    • %x : 每個 char 兩位 byte 表示,英文小寫表示
    • %X : 每個 char 兩位 byte 表示,英文大寫表示
  4. 整數
    • %b : 二進位表示
    • %c : unicode 相對應編碼
    • %d : 十進位
    • %o : 八進位
    • %x : 十六進位 字母使用小寫表示 a-f
    • %X : 十六進位 字母使用大寫表示 A-F
    • %q : 轉文字加上單引號 ' '
    • %U : unicode 格式 format: U+1234; same as "U+%04X"
  5. 浮點數
    • %b : 無小數部分的,指數為二的冪的科學計數法
    • %f : 打印浮點數
    • %F : 與 %f 相同
    • %e : 科學記號 英文字母小寫表示 e
    • %E : 科學記號 英文字母大寫表示 E
    • %g : 有指數的情況使用 %e 不然使用 %f
    • %G : 有指數的情況使用 %E 不然使用 %F
  6. 指針
    • %p : 十六進位表示前綴 0x
我們使用以下 struct 來做測試,順便建立一下初始化 func
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)

打印完自動換行,效果如下func 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
可以看到每次打印完之後就會幫你換行,不需要自己在加上\n

  • 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 表示,英文大寫表示
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]
可以看到使用 %s 打印型態不為 string 的數值出現了警告 除了使用 %v 相關操作符可以打印任何型態數值以外
如果使用操作符打印不相關數值就會出現 %!verbs(type=value) 的警告
關於其他用法請參考以下連結
程式碼:Github

0 意見:

張貼留言

Coprights @ 2016, Blogger Templates Designed By Templateism | Templatelib