【go】fmt包讲解与案例

server/2024/12/14 1:15:16/

Go 中的 fmt 包

fmt 包是 Go 语言标准库中用于格式化和输入输出的核心工具。
提供多种函数实现字符串输出、格式化输入输出、用户交互等功能。

fmt 包的常用输出函数

  • Print:直接输出内容,不带换行符。
  • Println:输出内容,并在末尾添加换行符。
  • Printf:按指定格式输出内容(支持占位符,如 %d%s 等)。
  • Sprint:格式化内容为字符串,返回结果而非直接输出。
  • Fprint:将格式化内容输出到指定的 io.Writer(如文件)。

示例:

package mainimport "fmt"func main() {// 普通输出fmt.Print("普通输出:")fmt.Println("Hello, World!")// 格式化输出name := "Alice"age := 25fmt.Printf("名字:%s,年龄:%d\n", name, age)// 返回格式化字符串message := fmt.Sprintf("欢迎 %s,您今年 %d 岁!", name, age)fmt.Println(message)
}

输出结果:

普通输出:Hello, World!
名字:Alice,年龄:25
欢迎 Alice,您今年 25 岁!

fmt 包的格式化占位符

  • 通用占位符
    • %v:按变量原始值输出。
    • %+v:显示结构体字段名和值。
    • %#v:按 Go 语法格式输出值。
    • %T:输出变量类型。
    • %%:输出百分号 %
  • 数据类型相关占位符
    • 布尔值:%t
    • 整型:%d(十进制)、%b(二进制)、%x(十六进制)
    • 浮点型:%f%e(科学计数法)、%g
    • 字符串:%s
    • 指针:%p

示例:

package mainimport "fmt"func main() {num := 42str := "Go语言"boolean := truefmt.Printf("整数:%d,二进制:%b,十六进制:%x\n", num, num, num)fmt.Printf("字符串:%s,布尔值:%t\n", str, boolean)fmt.Printf("变量类型:%T\n", str)
}

输出结果:

整数:42,二进制:101010,十六进制:2a
字符串:Go语言,布尔值:true
变量类型:string

fmt 包的输入函数

  • Scan:从标准输入读取值,按空格分隔多个变量。
  • Scanln:读取值并在换行处停止。
  • Scanf:按格式读取输入值(如 “请输入%d”)。

示例:

package mainimport "fmt"func main() {var name stringvar age intfmt.Print("请输入您的名字:")fmt.Scanln(&name)fmt.Print("请输入您的年龄:")fmt.Scanln(&age)fmt.Printf("你好,%s!您今年 %d 岁。\n", name, age)
}

输入示例:

请输入您的名字:Alice
请输入您的年龄:30

输出结果:

你好,Alice!您今年 30 岁。

总结

  • fmt 包是 Go 中处理输入输出的核心库,支持格式化操作和用户交互。
  • 常用函数包括 Print、Printf、Scan、Scanf 等,功能覆盖广泛。
  • 提供灵活的占位符,支持多种数据类型的格式化操作。

代码案例

package _caseimport ("bufio""fmt""os""strings"
)func FmtCase() {// fmt包主要分为// 向外输出内容和// 获取输入内容两大部分。// 1.x 向外输出// 1.1 Print系列 会将内容输出到系统的标准输出// 1.1.1 Printfmt.Print("在终端打印信息")// 1.1.2 Printfname := "kk"fmt.Printf("我是:%s\n", name)// 1.1.3 Printlnfmt.Println("自动换行")// 1.2 Fprintf系列 会将内容输出到一个io.Writer接口类型的变量w中(os包三个可用变量,Stdout标准输出, Stdin标准输入, Stderr标准错误),我们通常用这个函数往文件中写入内容。// 1.2.1 Fprintn, err := fmt.Fprint(os.Stdout, "输出到标准输出Stdout\n")// 1.2.1 Fprintfn, err = fmt.Fprintf(os.Stdout, "输出到标准输入%s\n, num: %d, err: %v\n", "stdin", n, err)// 1.2.1 Fprintlnn, err = fmt.Fprintln(os.Stdout, "输出到错误输出Stderr")// 1.3 Sprint系列函数会把传入的数据生成并返回一个字符串。// 1.3.1 Sprints1 := fmt.Sprint("kk")// 1.3.1 Sprintfname, age := "ku", 18s2 := fmt.Sprintf("name:%s, age: %d", name, age)// 1.3.1 Sprintlns3 := fmt.Sprintln("ku")fmt.Println(s1, s2, s3)// 1.4 Errorf函数根据format参数生成格式化字符串%w包裹错误并返回一个包含该字符串的错误。// 1.4.1 Errorferr = fmt.Errorf("a error%w\n", err)// 通用占位符type simple struct {value int}a := simple{value: 10,}fmt.Printf("默认格式的值:%v \n", a)fmt.Printf("包含字段名的值:%+v \n", a)fmt.Printf("go语法表示的值:%#v \n", a)fmt.Printf("go语法表示的类型:%T \n", a)fmt.Printf("双%%:100%% \n")// bool型占位符fmt.Printf("bool: %t\n", true)// 整数占位符v1 := 10 // 对应码点转字符为\nfmt.Printf("二进制:%b \n", v1)fmt.Printf("Unicode码点转字符:%c \n", v1)fmt.Printf("十进制: %d \n", v1)fmt.Printf("八进制: %o \n", v1)fmt.Printf("以0o为前缀的八进制: %O \n", v1)fmt.Printf("16进制: %x \n", v1)fmt.Printf("16进制大写字母表示: %X \n", v1)fmt.Printf("用单引号将字符值包裹: %q \n", v1)fmt.Printf("Unicode格式: %U \n", v1)//浮点数与复数占位符f := 12.34f2 := 12.3231313131313000fmt.Printf("二进制科学计数法:%b\n", f)fmt.Printf("科学计数法:%e\n", f)fmt.Printf("科学计数法E:%E\n", f)fmt.Printf("小数:%f\n", f)fmt.Printf("小数:%F\n", f)fmt.Printf("自适应%%e或者%%f(更简洁):%g\n", f)fmt.Printf("自适应%%e或者%%f(更简洁):%g\n", f2)fmt.Printf("自适应%%E或者%%F(更简洁):%G\n", f)// 宽度标识符n1 := 88.88fmt.Printf("%f\n", n1)fmt.Printf("%9.f\n", n1)fmt.Printf("%.2f\n", n1)fmt.Printf("%9.2f\n", n1)fmt.Printf("%9f\n", n1)// 字符串和[]bytes := "枯藤"s11 := []byte{'a', 'b', 'c'}s12 := []byte{65, 66, 67}fmt.Printf("直接输出字符串或者[]byte:%s\n", s)fmt.Printf("直接输出字符串或者[]byte:%s\n", s11)fmt.Printf("直接输出字符串或者[]byte:%s\n", s12)fmt.Printf("该值对应的双引号括起来的go语法字面量:%q\n", s11)fmt.Printf("每个字节用两字符16进制表示:%x\n", s)fmt.Printf("每个字节用两字符16进制表示:%X\n", s)// 指针a1 := 18fmt.Printf("加上0x的16进制地址值:%p\n", &a1)fmt.Printf("不加上0x的16进制地址值:%#p\n", &a1)// 2.x 获取输入// 2.1 Scan系列// 2.1.1 Scan 从标准输入中扫描用户输入的数据,将以空白符分隔的数据分别存入指定的参数。var (Name    stringAge     intMarried bool)_, err = fmt.Scan(&Name, &Age, &Married)if err != nil {return}fmt.Printf("扫描结果 name: %s, age: %d, married:%t\n", Name, Age, Married)// 2.1.1 Scanf 为输入数据指定了具体的输入内容格式,只有按照格式输入数据才会被扫描并存入对应变量。fmt.Println("请按照格式输入:(1: %s 2: %d 3:%t):")_, err = fmt.Scanf("1: %s 2: %d 3: %t", &Name, &Age, &Married)fmt.Printf("扫描结果 name: %s, age: %d, married: %t\n", Name, Age, Married)// 2.1.1 Scanln Scanln类似Scan,它在遇到换行时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。_, _ = fmt.Scanln(&Name, &Age, &Married)fmt.Printf("扫描结果 name: %s, age: %d, married: %t\n", Name, Age, Married)// 2.2 Fscan系列 类似于fmt.Scan、fmt.Scanf、fmt.Scanln三个函数,只不过它们不是从标准输入中读取数据而是从io.Reader中读取数据。// 2.2.1 Fscan// 2.2.1 Fscanf// 2.2.1 Fscanln// 2.3 Sscan系列 类似于fmt.Scan、fmt.Scanf、fmt.Scanln三个函数,只不过它们不是从标准输入中读取数据而是从指定字符串中读取数据。// 2.3.1 Sscan// 2.3.1 Sscanf// 2.3.1 Sscanln// 2.3 bufio.NewReader 有时候我们想完整获取输入的内容,而输入的内容可能包含空格,这种情况下可以使用bufio包来实现。reader := bufio.NewReader(os.Stdin) // 从标准输入生成读对象fmt.Print("请输入:")text, _ := reader.ReadString('\n') // 读到换行结束text = strings.TrimSpace(text)     // 删除所有前导和尾部空格fmt.Printf("%#v\n", text)
}

http://www.ppmy.cn/server/149965.html

相关文章

Linux网络之“桥接模式”和“NAT模式”配置

介绍虚拟机的“桥接模式”和“NAT模式”配置。 1、“桥接模式”介绍 “桥接模式”将虚拟机的虚拟网络适配器与主机的“物理网络适配器”进行交接,虚拟机中的“虚拟网络适配器”通过主机中的“物理网络适配器”访问外部网络。物理主机的网卡好比是一个“虚拟的交换机…

linux-12 关于shell(十一)ls

登录系统输入用户名和密码以后,会显示给我们一个命令提示符,就意味着我们在这里就可以输入命令了,给一个命令,这个命令必须要可执行,那问题是我的命令怎么去使用,命令格式有印象吗?在命令提示符…

Unreal Engine 中的UI界面开发

推荐的使用方式 轻量级 HUD:使用 Canvas 绘制简单的文本、调试信息或基础 UI(如准星、血量条等)。 复杂 UI:使用 UMG(Unreal Motion Graphics)和 Slate 进行布局和交互,避免手动管理 Canvas 绘制。 避免遮挡场景:仅绘制必要的内容,并利用透明度(如 FLinearColor(1, 1…

Node.js安装教程及在vscode中的配置(超详细)

****超详细的Node.****js安装教程及在vscode中的配置 如果教程中出现了错误或者有其他问题,欢迎指正,我会积极改正的,希望能帮到你们。 一、Node****.js下载安装教程**** 1、下载安装 进入nodejs官网,下载18.15.0长期维护版。…

Linux——管理用户和用户组

一、用户有哪些 root用户 定义:root用户是Linux系统中的最高权限用户,具有对系统所有资源的完全控制权。特性:root用户可以执行系统中的任何操作,包括修改系统配置文件、安装软件、管理系统服务等。由于其拥有最高权限&#xff0c…

前端传入Grule,后端保存到 .grl 文件中

前端传入Grule,后端保存到 .grl 文件中 通过简单的输入框,将Grule的部分拆解成 规则名称 规则描述 规则优先级 规则条件 规则逻辑Grule关键字 when Then 模拟了 if 判断的条件和逻辑部分 类似于 shell 和 ruby 之类的脚本语言,有 then 关键字…

PyTorch基本使用-张量的索引操作

在操作张量时,经常要去获取某些元素进行处理或者修改操作,在这里需要了解torch中的索引操作。 准备数据: data torch.randint(0,10,[4,5]) print(data--->,data)输出结果: data---> tensor([[3, 9, 4, 0, 5],[7, 5, 9, …

HTTP 状态码大全

常见状态码 200 OK # 客户端请求成功 400 Bad Request # 客户端请求有语法错误 不能被服务器所理解 401 Unauthorized # 请求未经授权 这个状态代码必须和WWW- Authenticate 报头域一起使用 403 Forbidden # 服务器收到请求但是拒绝提供服务 404 Not Found # 请求资源不存…