/*
%v 輸出結構體 {10 30}
%+v 輸出結構體顯示字段名 {one:10 tow:30}
%#v 輸出結構體源代碼片段 main.Point{one:10, tow:30}
%T 輸出值的類型 main.Point
%t 輸出格式化布爾值 true
%d`輸出標准的十進制格式化 100
%b`輸出標准的二進制格式化 99 對應 1100011
%c`輸出定整數的對應字符 99 對應 c
%x`輸出十六進制編碼 99 對應 63
%f`輸出十進制格式化 99 對應 63
%e`輸出科學技科學記數法表示形式 123400000.0 對應 1.234000e+08
%E`輸出科學技科學記數法表示形式 123400000.0 對應 1.234000e+08
%s 進行基本的字符串輸出 "\"string\"" 對應 "string"
%q 源代碼中那樣帶有雙引號的輸出 "\"string\"" 對應 "\"string\""
%p 輸出一個指針的值 &jgt 對應 0xc00004a090
% 后面使用數字來控制輸出寬度 默認結果使用右對齊並且通過空格來填充空白部分
%2.2f 指定浮點型的輸出寬度 1.2 對應 1.20
%*2.2f 指定浮點型的輸出寬度對齊,使用 `-` 標志 1.2 對應 *1.20
*/
jgt := Point{10,30}
fmt.Printf("%v\n",jgt) // {10 30}
fmt.Printf("%+v\n",jgt) // {one:10 tow:30}
fmt.Printf("%#v\n",jgt) // main.Point{one:10, tow:30}
fmt.Printf("%T\n",jgt) // main.Point
fmt.Printf("%t\n",true) // true
fmt.Printf("%d\n",100) // 100
fmt.Printf("%b\n",99) // 99 對應 1100011
fmt.Printf("%c\n",99) // 99 對應 c
fmt.Printf("%x\n",99) // 99 對應 63
fmt.Printf("%f\n",99.9) // 99.9 對應 99.900000
fmt.Printf("%e\n",123400000.0) // 123400000.0 對應 1.234000e+08
fmt.Printf("%E\n",123400000.0) // 123400000.0 對應 1.234000e+08
fmt.Printf("%s\n","\"string\"") // "\"string\"" 對應 "string"
fmt.Printf("%q\n","\"string\"") // "\"string\"" 對應 "string"
fmt.Printf("%p\n",&jgt) // &jgt 對應 0xc00004a090
fmt.Printf("%6d\n",8) // &jgt 對應 0xc00004a090
fmt.Printf("%2.2f\n",1.2 ) // 1.2 對應 1.20
fmt.Printf("*%2.2f\n",1.2 ) // 1.2 對應 *1.20
// 輸出格式化的字符串。`Sprintf` 則格式化並返回一個字 符串而不帶任何輸出。
s := fmt.Sprintf("是字符串 %s ","string")
fmt.Println(s) // 是字符串 %s 對應 是字符串 string
// 你可以使用 `Fprintf` 來格式化並輸出
fmt.Fprintf(os.Stderr, "格式化 %s\n", "error")