2、fmt

fmt包含有格式化I/O函数,类似于C语言的printf和scanf。格式字符串的规则来源于C,但更简单一些

输出

Print

func Print(a ...interface{}) (n int, err error)

Println

func Println(a ...interface{}) (n int, err error)

Printf

func Printf(format string, a ...interface{}) (n int, err error)

Fprint

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) 

Sprint

func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string

Errorf

func Errorf(format string, a ...interface{}) error 

格式化占位符

通用

占位符 说明 例子 结果
%v 相应值的默认格式 Printf("%v",person) {lucy 18}
%+v 类似%v,但输出结构体时会添加字段名 Printf("%+v",person) {name:lucy age:18}
%#v 相应值的Go语法表示 Printf("#v",person) main.Person{name:"lucy", age:18}
%T 相应值的类型的Go语法表示 Printf("%T",person) main.Person
%% 字面上的百分号,并非值的占位符 Printf("%%") %

布尔

占位符 说明 例子 结果
%t 单词true或false Printf("%t",true) true

整数

占位符 说明 例子 结果
%b 二进制表示 Printf("%b",5) 101
%c 该值对应的unicode码值 Printf("%c",0x4E2d)
%d 十进制表示 Printf("%d",0x12) 18
%02d 两位整数 Printf("%02d",8) 08
%o 八进制表示 Printf("%o",10) 12
%q 单引号围绕的字符字面值,由Go语法安全的转译 Printf("%q",0x4E2d)
%x 十六进制表示,字母形式为小写a-f Printf("%x",13) d
%X 十六进制表示,字母形式为大写A-F Printf("%X",13) D
%U 表示为Unicode格式:U+1234,等价于U+%04X Printf("%U",0x4E2d) U+4E2D

浮点数和复数

占位符 说明 例子 结果
%e 科学计数法,如-1234.456e+78 Printf("%e",10.20) 1.020000e+01
%E 科学计数法,如-1234.456E+78 Printf("%E",10.20) 1.020000E+01
%f 有小数部分但无指数部分 Printf("%.2f", 3.1415926) 3.14
%9f 宽度9,默认精度 Printf("%9f", 88.88) 88.880000
%.2f 默认宽度,精度2 Printf("%.2f", 88.8888) 88.88
%g 根据实际情况采用%e%f格式(以获得更简洁、准确的输出) Printf("%g",10.20) 10.2
%G 根据实际情况采用%E%F格式(以获得更简洁、准确的输出) Printf("%G",10.20) 10.2+2i

字符串和字节数组

占位符 说明 例子 结果
%s 输出字符串表示(string类型或[]byte) Printf("%s",[]byte("Go语言")) Go语言
%q 双引号围绕的字符串,由Go语法安全的转译 Printf("%q","Go语言") "Go语言"
%x 十六进制,小写字母,每字节两个字符 Printf("%x","golang") 676f6c616e67
%X 十六进制,大写字母,每字节两个字符 Printf("%X","golang") 676F6C616E67

指针

占位符 说明 例子 结果
%p 十六进制表示,前缀 0x Printf("%p",&person) 0xc0420341c0
%#p 十六进制表示,不带前缀 0x Printf("%#p",&person) c0420341c0

输入

Scan

func Scan(a ...interface{}) (n int, err error)
package main

import (
	"fmt"
)

func main() {
	var a string
	var b string
    //此处必须使用接收参数的变量指针
	fmt.Scan(&a, &b)
	fmt.Print(a, b)
}

Scanf

func Scanf(format string, a ...interface{})(n int, err error)

Scanln

func Scanln(a ...interface{}) (n int, err error)

文件输入输出

这些函数是针对io.Writer、io.Reader进行输入和输出

输出

func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)

输入

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)

字符串输入输出

这些函数是针对string进行输入和输出

输出

func Sprint(a ...interface{}) string
func Sprintln(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string

输入

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)