Go Walkthrough: fmtlinux
package main import ( "fmt" ) //1 var brand = "ALIENWARE" type computer struct { name string price float32 config []string brand *string } func main() { myComputer := computer{"tktk", 18000.00, []string{"i7 9700k", "RTX 2080Ti", "DDR4 32G"}, &brand} fmt.Printf("my computer is: \n%#v\n", myComputer) fmt.Printf("my computer is: \n%v\n", myComputer) }
結果:api
go version go1.12 linux/amd64 my computer is: main.computer{name:"tktk", price:18000, config:[]string{"i7 9700k", "RTX 2080Ti", "DDR4 32G"}, brand:(*string)(0x5531b0)} my computer is: {tktk 18000 [i7 9700k RTX 2080Ti DDR4 32G] 0x5531b0} }
// 按照默認格式打印一系列變量 func Print(a ...interface{}) (n int, err error) // 相比Print,在變量之間插入了空格,並最後添加上換行符 func Println(a ...interface{}) (n int, err error) // 根據自定義格式化字符串,能打印不一樣格式的輸出 func Printf(format string, a ...interface{}) (n int, err error)
func Fprint(w io.Writer, a ...interface{}) (n int, err error) func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
Fprint是更通用的形式,print僅僅是Fprint(os.Stdout, "Hello World!")的包裝函數
func Sprint(a ...interface{}) string func Sprintf(format string, a ...interface{}) string func Sprintln(a ...interface{}) string
當大量採用Sprint產生字符串,會產生瓶頸問題。命令行
func Errorf(format string, a ...interface{}) error { return errors.New(Sprintf(format, a...)) }
fmt包也有從stdin,io.Reader, string讀取並格式化的api。指針
func Scan(a ...interface{}) (n int, err error) func Scanf(format string, a ...interface{}) (n int, err error) func Scanln(a ...interface{}) (n int, err error)
func Fscan(r io.Reader, a ...interface{}) (n int, err error) func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error) func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
func Sscan(str string, a ...interface{}) (n int, err error) func Sscanf(str string, format string, a ...interface{}) (n int, err error) func Sscanln(str string, a ...interface{}) (n int, err error)
var name string var age int if _, err := fmt.Scan(&name, &age); err != nil { fmt.Println(err) os.Exit(1) } fmt.Printf("Your name is: %s\n", name) fmt.Printf("Your age is: %d\n", age)
執行交互調試
$ go run main.go Jane 25 Your name is: Jane Your age is: 25
總之,若是從命令行讀取並解析到指定的interface,如例子中的name,age,咱們有更好用的flag包能夠使用code