fmt常用工具和配置、常用的格式化占位符

学习资料:

  • Print系列函数会将内容输出到系统的标准输出
  • Println 函数会在输出内容的结尾添加一个换行符
  • Printf 函数支持格式化输出字符串
func main() {
    fmt.Print("在终端打印该信息。")
    name := "枯藤"
    fmt.Printf("我是:%s\n", name)
    fmt.Println("在终端打印单独一行显示")
}

Sprint、Sprintln、Sprintf

Sprint系列函数会把传入的数据生成并返回一个字符串。

最长用:fmt.Sprintf 格式化拼接

func main() {
  // 使用 Sprint 拼接
  hello := "hello"
	world := "world"
	s1 := fmt.Sprint("测试 Sprint", " ", hello, " ", world)

  // 使用 + 拼接
	ss1 := "测试 Sprint" + " " + hello + " " + world

  // 格式化输出 
	name1 := "枯藤"
	age := 18
	s2 := fmt.Sprintf("name:%s,age:%d", name1, age)

	s3 := fmt.Sprintln("枯藤")
	fmt.Println(s1, ss1, s2, s3)
}

格式占位符

通用占位符

最常用:%v, %+v 表示结构体,%T 表示类型

占位符说明
%v值的默认格式表示
%+v类似%v,但输出结构体时会添加字段名
%#v值的Go语法表示
%T打印值的类型
%%百分号

代码示例:

func main() {
  // 值
  fmt.Printf("%v\n", 100)
	fmt.Printf("%v\n", false)
	
  // 结构体
  o := struct{ name string }{"枯藤"}
	fmt.Printf("%v\n", o)
	fmt.Printf("%+v\n", o)
	
  fmt.Println()
	
  fmt.Printf("%#v\n", o)
	fmt.Printf("%T\n", o)
	fmt.Printf("100%%\n")
}

布尔型

占位符说明
%ttrue或false

整型

常用:%d 十进制输出数字

占位符说明
%b表示为二进制
%c该值对应的unicode码值
%d表示为十进制
%o表示为八进制
%x表示为十六进制,使用a-f
%X表示为十六进制,使用A-F
%U表示为Unicode格式:U+1234,等价于”U+%04X”
%q该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示

代码:

func main() {
  n := 65
  fmt.Printf("%b\n", n)
  fmt.Printf("%c\n", n)
  // 十进制输出
  fmt.Printf("%d\n", n)
  
  fmt.Printf("%o\n", n)
  fmt.Printf("%x\n", n)
  fmt.Printf("%X\n", n)
}

浮点型

主要记住常用的2个:%f, %g

占位符说明
%b无小数部分、二进制指数的科学计数法,如-123456p-78
%e科学计数法,如-1234.456e+78
%E科学计数法,如-1234.456E+78
%f有小数部分但无指数部分,如123.456
%F等价于%f
%g根据实际情况采用%e或%f格式(以获得更简洁、准确的输出)
%G根据实际情况采用%E或%F格式(以获得更简洁、准确的输出)

代码:

func main() {
  f := 1200.34567
	fmt.Printf("%b\n", f)
	fmt.Printf("%e\n", f)
	fmt.Printf("%E\n", f)
	//
	fmt.Printf("%f\n", f)
	fmt.Printf("%F\n", f)
	fmt.Printf("%g\n", f)
	fmt.Printf("%G\n", f)
}

// 输出结果
// 5279176086062293p-42
// 1.200346e+03
// 1.200346E+03
// 1200.345670
// 1200.345670
// 1200.34567
// 1200.34567

Scan,Scanf, Scanln

  • Scan 从标准输入扫描文本,读取由 空白符 分隔的值保存到传递给本函数的参数中,换行符 视为空白符。
func main() {
  var (
		name11  string
		age1    int
		married bool
	)
	fmt.Scan(&name11, &age1, &married)
	fmt.Printf("扫描结果 name:%s age:%d married:%t \n", name11, age1, married)
}
  • Scanf 从标准输入扫描文本,根据 format 参数指定的格式 去读取由空白符分隔的值保存到传递给本函数的参数中。
func main() {
    var (
        name    string
        age     int
        married bool
    )
    // 按照指定的格式输入才能取到值 1:Alan 2:18 3:false
    fmt.Scanf("1:%s 2:%d 3:%t", &name, &age, &married)
    fmt.Printf("扫描结果 name:%s age:%d married:%t \n", name, age, married)
}

  • Scanln 类似 Scan,它以空格进行分隔,在 遇到换行 时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。
func main() {
  var (
		name111    string
		age111     int
		married111 bool
	)
	fmt.Scanln(&name111, &age111, &married111)
	fmt.Printf("扫描结果 name:%s age:%d married:%t \n", name111, age111, married111)
}