当前位置: 首页 > news >正文

go语言 fmt的几个打印区别以及打印格式

文章目录

  • 一、打印Print
    • 1.1 fmt.Print 和 fmt.Println
    • 1.2fmt.Printf
    • 1.3 fmt.Sprint, fmt.Sprintf, 和 fmt.Sprintln
    • 1.4 fmt.Fprint, fmt.Fprintf, 和 fmt.Fprintln
  • 二、打印格式
    • 基本格式动词
    • 整数类型
    • 浮点数和复数类型
    • 字符串和字节切片
    • 布尔类型
    • 指针

一、打印Print

Go 语言的 fmt 包提供了多种打印函数,用于格式化和输出数据。以下是几个常用的 fmt 打印函数及其区别:

  • fmt.Print 和 fmt.Println
  • fmt.Printf
  • fmt.Sprint, fmt.Sprintf, 和 fmt.Sprintln
  • fmt.Fprint, fmt.Fprintf, 和 fmt.Fprintln

1.1 fmt.Print 和 fmt.Println

fmt.Print:将参数打印到标准输出,不附加任何额外的字符。
fmt.Println:将参数打印到标准输出,并在末尾附加一个换行符。
示例:

package main
import "fmt"func main() {fmt.Print("Hello, ")fmt.Print("World!")// 输出: Hello, World!fmt.Println("Hello, ")fmt.Println("World!")// 输出:// Hello,// World!
}

1.2fmt.Printf

fmt.Printf:根据格式字符串格式化并打印参数。格式字符串可以包含格式动词,例如 %d 表示整数,%s 表示字符串,%v 表示默认格式等。
示例:

package mainimport "fmt"func main() {name := "Alice"age := 30fmt.Printf("Name: %s, Age: %d\n", name, age)// 输出: Name: Alice, Age: 30
}

1.3 fmt.Sprint, fmt.Sprintf, 和 fmt.Sprintln

这些函数类似于 fmt.Print, fmt.Printf, 和 fmt.Println,但它们将结果返回为字符串,而不是直接打印到标准输出。

fmt.Sprint:返回格式化后的字符串。
fmt.Sprintf:根据格式字符串返回格式化后的字符串。
fmt.Sprintln:返回格式化后的字符串,并在末尾附加一个换行符。
示例:

package mainimport "fmt"func main() {str := fmt.Sprint("Hello, ", "World!")fmt.Println(str)// 输出: Hello, World!str = fmt.Sprintf("Name: %s, Age: %d", "Alice", 30)fmt.Println(str)// 输出: Name: Alice, Age: 30str = fmt.Sprintln("Hello, ", "World!")fmt.Println(str)// 输出: Hello, World!// (注意末尾的空行)
}

1.4 fmt.Fprint, fmt.Fprintf, 和 fmt.Fprintln

这些函数类似于 fmt.Print, fmt.Printf, 和 fmt.Println,但它们将结果输出到指定的 io.Writer(例如文件或网络连接)。

fmt.Fprint:将格式化后的输出写入 io.Writer。
fmt.Fprintf:根据格式字符串将格式化后的输出写入 io.Writer。
fmt.Fprintln:将格式化后的输出写入 io.Writer,并在末尾附加一个换行符。
示例:

package mainimport ("fmt""os"
)func main() {f, err := os.Create("output.txt")if err != nil {fmt.Println(err)return}defer f.Close()fmt.Fprint(f, "Hello, ")fmt.Fprintln(f, "World!")fmt.Fprintf(f, "Name: %s, Age: %d\n", "Alice", 30)
}

上面的代码会在当前目录下创建一个名为 output.txt 的文件,并将以下内容写入其中:

Hello, World!
Name: Alice, Age: 30

总结
fmt.Print 和 fmt.Println:直接将参数打印到标准输出。
fmt.Printf:根据格式字符串格式化并打印参数到标准输出。
fmt.Sprint, fmt.Sprintf, 和 fmt.Sprintln:返回格式化后的字符串,不直接打印。
fmt.Fprint, fmt.Fprintf, 和 fmt.Fprintln:将格式化后的输出写入指定的 io.Writer。

二、打印格式

在 Go 语言的 fmt 包中,格式动词(format verbs)用于控制字符串的格式化输出。不同的格式动词可以用于不同类型的数据,提供多种显示选项。以下是一些常见的格式动词及其含义:

基本格式动词

%v:默认格式输出。
%+v:结构体字段名和值一起输出。
%#v:Go 语言语法格式输出(即,可以直接用作 Go 代码的输出)。
%T:输出值的类型。
%%:字面上的百分号。

整数类型

%b:二进制表示。
%c:相应 Unicode 码点的字符。
%d:十进制表示。
%o:八进制表示。
%O:带零前缀的八进制表示(0o123)。
%x:十六进制表示,小写字母。
%X:十六进制表示,大写字母。
%U:Unicode 格式:U+1234。
%q:单引号围绕的字符字面值,必要时会采用转义表示。

浮点数和复数类型

%b:无小数部分的科学计数法,例如 -123456p-78。
%e:科学计数法,例如 -1.234456e+78。
%E:科学计数法,例如 -1.234456E+78。
%f:有小数部分但无指数部分,例如 123.456。
%F:等价于 %f。
%g:根据实际情况采用 %e 或 %f 格式(以获得更简洁的输出)。
%G:根据实际情况采用 %E 或 %F 格式(以获得更简洁的输出)。

字符串和字节切片

%s:字符串或字节切片的输出。
%q:带双引号的字符串。
%x:每个字节用两字符十六进制表示(小写字母),如 “hex” -> “686578”。
%X:每个字节用两字符十六进制表示(大写字母)。

布尔类型

%t:true 或 false。

指针

%p:十六进制表示的指针值。
示例代码
下面是一个示例代码,演示了各种格式动词的用法:

package mainimport ("fmt"
)type Person struct {Name stringAge  int
}func main() {p := Person{Name: "Alice", Age: 30}fmt.Printf("默认格式: %v\n", p)fmt.Printf("带字段名: %+v\n", p)fmt.Printf("Go 语法格式: %#v\n", p)fmt.Printf("类型: %T\n", p)i := 42fmt.Printf("二进制: %b\n", i)fmt.Printf("字符: %c\n", i)fmt.Printf("十进制: %d\n", i)fmt.Printf("八进制: %o\n", i)fmt.Printf("十六进制: %x\n", i)fmt.Printf("带 Unicode: %U\n", i)fmt.Printf("单引号字符: %q\n", i)f := 3.1415926535fmt.Printf("科学计数法 (小写): %e\n", f)fmt.Printf("科学计数法 (大写): %E\n", f)fmt.Printf("小数部分: %f\n", f)fmt.Printf("根据情况使用 %%e 或 %%f: %g\n", f)s := "hello"fmt.Printf("字符串: %s\n", s)fmt.Printf("带引号字符串: %q\n", s)fmt.Printf("十六进制 (小写): %x\n", s)fmt.Printf("十六进制 (大写): %X\n", s)b := truefmt.Printf("布尔值: %t\n", b)ptr := &pfmt.Printf("指针: %p\n", ptr)
}

输出结果

	默认格式: {Alice 30}带字段名: {Name:Alice Age:30}Go 语法格式: main.Person{Name:"Alice", Age:30}类型: main.Person二进制: 101010字符: *十进制: 42八进制: 52十六进制: 2a带 Unicode: U+002A单引号字符: '*'科学计数法 (小写): 3.141593e+00科学计数法 (大写): 3.141593E+00小数部分: 3.141593根据情况使用 %e 或 %f: 3.14159字符串: hello带引号字符串: "hello"十六进制 (小写): 68656c6c6f十六进制 (大写): 68656C6C6F布尔值: true指针: 0xc000010200

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux内核启用 bridge 模块
  • UPFC统一潮流控制器的simulink建模与仿真
  • React、Vue的password输入框组件,如何关闭自动填充?
  • Go 语言中的互斥锁 Mutex
  • ARFoundation系列讲解 - 91 Immersal 简介
  • 独角数卡(自动发卡系统)开源自动化售货最新2.0.6
  • 【UE5.1】NPC人工智能——02 NPC移动到指定位置
  • 高性能存储 SIG 月度动态:优化 xfs dax reflink 时延,独立选型并维护 mdadm 和 ledmon
  • gradle学习及问题
  • 【Unity学习笔记】第十九 · 物理引擎约束求解解惑(LCP,最优,拉格朗日乘数法,SI,PGS,基于冲量法)
  • docker-cli nerdctl ctr crictl容器命令比较
  • 基于jeecgboot-vue3的Flowable流程支持bpmn流程设计器与仿钉钉流程设计器-编辑多版本处理
  • NLP入门——RNN、LSTM模型的搭建、训练与预测
  • 解决 Vscode不支持c++11的语法
  • SQL Server Query Store Settings (查询存储设置)
  • 分享的文章《人生如棋》
  • 「面试题」如何实现一个圣杯布局?
  • 【前端学习】-粗谈选择器
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Angular 4.x 动态创建组件
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • DataBase in Android
  • Java,console输出实时的转向GUI textbox
  • Logstash 参考指南(目录)
  • MySQL几个简单SQL的优化
  • Protobuf3语言指南
  • XML已死 ?
  • 多线程 start 和 run 方法到底有什么区别?
  • 搞机器学习要哪些技能
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 解决iview多表头动态更改列元素发生的错误
  • 警报:线上事故之CountDownLatch的威力
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 正则表达式小结
  • # centos7下FFmpeg环境部署记录
  • # include “ “ 和 # include < >两者的区别
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #图像处理
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (175)FPGA门控时钟技术
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (Java入门)抽象类,接口,内部类
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (补)B+树一些思想
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (排序详解之 堆排序)
  • (三)c52学习之旅-点亮LED灯
  • (转载)虚函数剖析
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .net dataexcel 脚本公式 函数源码