fmt 模块类似 C++ 中的 iostream,C 中的 stdio.h
接下来开始讲述。
处理输入
解析
我们分三部分讲这里的过程。引入 fmt,声明变量
在这里开头,先使用 var() 声明了一堆变量让我们首先关注 firstName 和 lastName。和这两个函数相关的代码我们单独抽出来:声明这两个函数为
string 类型,随即打印 Please enter your full name: 。在此之fmt.Scanln(&firstName, &lastName) 让用户输入,以空格分割两个变量(从注释中 fmt.Scanf("%s %s", &firstName, &lastName) 不难看出)然后再将两个变量打印。input,f,i,s,format 四个变量
在这四个变量中 在这之中,
format 变量是把 input变量转换为 f,i,s 的格式化的规范。在开头定义了 input 的值为56.12 为小数 float,5212 为整数 int,Go 为字符串 string最终通过 fmt.Sscanf(input, format, &f, &i, &s) 进行格式化。\格式化输出(fmt 的格式化能力)
在 Go 语言中,fmt 不仅可以处理输入,还提供了非常强大的“格式化输出能力”,类似 C 语言中的 printf 系列函数。
格式化输出到控制台
fmt.Printf 用于按照指定格式输出内容。
name=Go, age=15, score=98.5
常用格式化占位符(verbs)
Go 的格式化符号非常重要,几乎所有 fmt 输出都会用到:| 占位符 | 说明 | 示例 |
|---|---|---|
%s | 字符串 | "Go" |
%d | 十进制整数 | 123 |
%f | 浮点数 | 3.14 |
%.2f | 保留 2 位小数的浮点数 | 3.14 |
%t | 布尔值 | true |
%v | 默认格式 | 任意类型 |
%T | 类型 | int / string |
%+v | 显示字段名(结构体) | {Field:Value} |
Sprintf 不直接输出,而是返回一个字符串。
- 拼接字符串
- 日志生成
- 数据预处理
写入到指定输出流
可以把格式化内容写入文件或其他输出目标。Hello World!
os.Stdout 表示标准输出,也可以替换为文件句柄。格式化输入回顾:Sscanf 的本质 我们之前用过:
按照 format 规则,从字符串中“解析”数据示例:
本质理解: Printf:格式化输出 Sprintf:格式化成字符串 Fprintf:格式化写入流 Sscanf:按格式解析输入
总结 Go 的 fmt 可以理解为一个“格式化引擎”: 输出:Printf / Sprintf / Fprintf 输入解析:Scan / Scanf / Sscanf 它们共享同一套“格式化规则(verbs)”,这是 Go 输入输出系统的核心设计之一。 参考: