golang 的fmt 包實現了格式化I/O函數
```
func Print(a ...interface{}) (n int, err error)
func Sprint(a ...interface{}) string
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)
func Sprintln(a ...interface{}) string
func Fprintln(w io.Writer, a ...interface{})
func Printf(format string, a ...interface{}) (n int, err error)
func Sprintf(format string, a ...interface{}) string
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
```
**按照輸出格式劃分**
如果后綴是"`f`", 則指定format格式輸出,如果后綴是"`ln`",則換行輸出。
| 函數 | 區別 |
| --- | --- |
| Println、Fprintln、Sprintln | 輸出內容時會加上換行符 |
| Print、Fprint、Sprint | 輸出內容時不加上換行符 |
| Printf、Fprintf、Sprintf | 按照指定格式化文本輸出內容 |
**按照輸出終端劃分**
如果前綴是"`F`", 則指定了`io.Writer`,如果前綴是"`S`", 則是輸出到字符串
| 函數 | 區別 |
| --- | --- |
| Print、Printf、Println | 輸出內容到標準輸出os.Stdout |
| Fprint、Fprintf、Fprintln | 輸出內容到指定的io.Writer |
| Sprint、Sprintf、Sprintln | 輸出內容到字符串 |
**format格式**
| 格式 | 含義 | 示例 | 結果
| --- | --- | --- | ---
| %% | 一個%字面量 | fmt.Printf("輸出%%") | 輸出%
| %b | 一個二進制整數值(基數為2),或者是一個(高級的)用科學計數法表示的指數為2的浮點數 | fmt.Printf("輸出二進制:%b", 5) | 輸出二進制:101
| %c | 字符型。可以把輸入的數字按照ASCII碼相應轉換為對應的字符 | fmt.Printf("數字轉ASCII碼:%c", 65) | 數字轉ASCII碼:A
| %d | 一個十進制數值(基數為10) | fmt.Println(fmt.Sprintf("字符串拼接數字:%d", 100)) | 字符串拼接數字:100
| %e | 以科學記數法e表示的浮點數或者復數值 | fmt.Printf("%e", 3.1415926) | 3.141593e+00
| %E | 以科學記數法E表示的浮點數或者復數值 | fmt.Printf("%E", 3.1415926) | 3.141593E+00
| %f | 以標準記數法表示的浮點數或者復數值 | fmt.Printf("%.7f", 3.1415926) | 3.1415926
| %g | 以%e或者%f表示的浮點數或者復數,任何一個都以最為緊湊的方式輸出 | fmt.Printf("%g", 3.1415926) | 3.1415926
| %G | 以%E或者%f表示的浮點數或者復數,任何一個都以最為緊湊的方式輸出 | fmt.Printf("%G", 3.1415926) | 3.1415926
| %o | 一個以八進制表示的數字(基數為8) | fmt.Printf("%o", -233) | -351
| %p | 以十六進制(基數為16)表示的一個值的地址,前綴為0x,字母使用小寫的a-f表示 | |
| %q | 使用Go語法以及必須時使用轉義,以雙引號括起來的字符串或者字節切片\[\]byte,或者是以單引號括起來的數字 | |
| %s | 直接輸出字符串或者[]byte | fmt.Printf("%s", "hello world") | hello world
| %t | 以true或者false輸出的布爾值 | fmt.Printf("%t", true) | true
| %T | 使用Go語法輸出的值的類型 | fmt.Printf("%T", 123) | int
| %U | 一個用Unicode表示法表示的整型碼點,默認值為4個數字字符 | fmt.Printf("%U", 567) | U+0237
| %v | 值的默認格式表示。當輸出結構體時,擴展標志(%#v)會添加字段名 | type person struct{<br>name string<br>}<br>func main() {<br>v := person{}<br>fmt.Printf("%#v", v)<br>} | main.person{name:""}
| %x | 以十六進制表示的整型值(基數為十六),使用a-f表示 | |
| %X | 以十六進制表示的整型值(基數為十六),使用A-F表示 | |