fmt官方文檔說明:https://studygolang.com/pkgdocgit
import "fmt"
github
mt包實現了相似C語言printf和scanf的格式化I/O。格式化動做('verb')源自C語言但更簡單。golang
verb:安全
通用:函數
%v 值的默認格式表示 %+v 相似%v,但輸出結構體時會添加字段名 %#v 值的Go語法表示 %T 值的類型的Go語法表示 %% 百分號
布爾值:ui
%t 單詞true或false
整數:spa
%b 表示爲二進制 %c 該值對應的unicode碼值 %d 表示爲十進制 %o 表示爲八進制 %q 該值對應的單引號括起來的go語法字符字面值,必要時會採用安全的轉義表示 %x 表示爲十六進制,使用a-f %X 表示爲十六進制,使用A-F %U 表示爲Unicode格式:U+1234,等價於"U+%04X"
浮點數與複數的兩個組分:指針
%b 無小數部分、二進制指數的科學計數法,如-123456p-78;參見strconv.FormatFloat %e 科學計數法,如-1234.456e+78 %E 科學計數法,如-1234.456E+78 %f 有小數部分但無指數部分,如123.456 %F 等價於%f %g 根據實際狀況採用%e或%f格式(以得到更簡潔、準確的輸出) %G 根據實際狀況採用%E或%F格式(以得到更簡潔、準確的輸出)
字符串和[]byte:code
%s 直接輸出字符串或者[]byte %q 該值對應的雙引號括起來的go語法字符串字面值,必要時會採用安全的轉義表示 %x 每一個字節用兩字符十六進制數表示(使用a-f) %X 每一個字節用兩字符十六進制數表示(使用A-F)
指針:orm
%p 表示爲十六進制,並加上前導的0x
寬度經過一個緊跟在百分號後面的十進制數指定,若是未指定寬度,則表示值時除必需以外不做填充。精度經過(可選的)寬度後跟點號後跟的十進制數指定。若是未指定精度,會使用默認精度;若是點號後沒有跟數字,表示精度爲0。舉例以下:
%f: 默認寬度,默認精度 %9f 寬度9,默認精度 %.2f 默認寬度,精度2 %9.2f 寬度9,精度2 %9.f 寬度9,精度0
func Print(a ...interface{}) (n int, err error)
Print採用默認格式將其參數格式化並寫入標準輸出。若是兩個相鄰的參數都不是字符串,會在它們的輸出之間添加空格。返回寫入的字節數和遇到的任何錯誤。
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
Fprint採用默認格式將其參數格式化並寫入w,對Print的擴展。若是兩個相鄰的參數都不是字符串,會在它們的輸出之間添加空格。返回寫入的字節數和遇到的任何錯誤。
func Sprint(a ...interface{}) string
Sprint採用默認格式將其參數格式化,串聯全部輸出生成並返回一個字符串。若是兩個相鄰的參數都不是字符串,會在它們的輸出之間添加空格。
func Println(a ...interface{}) (n int, err error)
Println採用默認格式將其參數格式化並寫入標準輸出。老是會在相鄰參數的輸出之間添加空格並在輸出結束後添加換行符。返回寫入的字節數和遇到的任何錯誤。
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
Fprintln採用默認格式將其參數格式化並寫入w。老是會在相鄰參數的輸出之間添加空格並在輸出結束後添加換行符。返回寫入的字節數和遇到的任何錯誤。
func Sprintln(a ...interface{}) string
Sprintln採用默認格式將其參數格式化,串聯全部輸出生成並返回一個字符串。老是會在相鄰參數的輸出之間添加空格並在輸出結束後添加換行符。
func Printf(format string, a ...interface{}) (n int, err error)
Printf根據format參數生成格式化的字符串並寫入標準輸出。返回寫入的字節數和遇到的任何錯誤。
即:接收一個可格式化string,而後輸出到標準輸出中。
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
Fprintf根據format參數生成格式化的字符串並寫入w,能夠理解爲對Printf的擴展,寫入到指定的目的地。返回寫入的字節數和遇到的任何錯誤。
func Sprintf(format string, a ...interface{}) string
Sprintf根據format參數生成格式化的字符串並返回該字符串。
func Errorf(format string, a ...interface{}) error
Errorf根據format參數生成格式化字符串並返回一個包含該字符串的錯誤。
獲取輸入
// Scan 從標準輸入中讀取數據,並將數據用空白分割並解析後存入 a 提供 // 的變量中(換行符會被看成空白處理),變量必須以指針傳入。 // 當讀到 EOF 或全部變量都填寫完畢則中止掃描。 // 返回成功解析的參數數量。
func Scan(a ...interface{}) (n int, err error) // Scanln 和 Scan 相似,只不過遇到換行符就中止掃描。 func Scanln(a ...interface{}) (n int, err error) // Scanf 從標準輸入中讀取數據,並根據格式字符串 format 對數據進行解析, // 將解析結果存入參數 a 所提供的變量中,變量必須以指針傳入。 // 輸入端的換行符必須和 format 中的換行符相對應(若是格式字符串中有換行 // 符,則輸入端必須輸入相應的換行符)。 // 佔位符 %c 老是匹配下一個字符,包括空白,好比空格符、製表符、換行符。 // 返回成功解析的參數數量。 func Scanf(format string, a ...interface{}) (n int, err error)
// 對於 Scan 而言,回車視爲空白 func main() { a, b, c := "", 0, false fmt.Scan(&a, &b, &c) fmt.Println(a, b, c) // 在終端執行後,輸入 abc 1 回車 true 回車 // 結果 abc 1 true } // 對於 Scanln 而言,回車結束掃描 func main() { a, b, c := "", 0, false fmt.Scanln(&a, &b, &c) fmt.Println(a, b, c) // 在終端執行後,輸入 abc 1 true 回車 // 結果 abc 1 true } // 格式字符串能夠指定寬度 func main() { a, b, c := "", 0, false fmt.Scanf("%4s%d%t", &a, &b, &c) fmt.Println(a, b, c) // 在終端執行後,輸入 1234567true 回車 // 結果 1234 567 true }
// 功能同上面三個函數,只不過從 r 中讀取數據。 func Fscan(r io.Reader, a ...interface{}) (n int, err error) func Fscanln(r io.Reader, a ...interface{}) (n int, err error) func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error) // 功能同上面三個函數,只不過從 str 中讀取數據。 func Sscan(str string, a ...interface{}) (n int, err error) func Sscanln(str string, a ...interface{}) (n int, err error) func Sscanf(str string, format string, a ...interface{}) (n int, err error)
type student struct { Name string Age int Score float32 } func main() { var str = "stu01 18 89.92" var stu student fmt.Sscanf(str, "%s %d %f", &stu.Name, &stu.Age, &stu.Score) fmt.Println(stu) }
輸出:
{stu01 18 89.92}