Go语言-fmt包中Print、Println与Printf的区别

前言:

Go 语言中的 fmt 包提供了多种输出函数,其中 Print、Println和Printf 是最常用的三个函数。它们在功能和使用上有一些关键区别,以下是详细的对比和分析。

基本功能

Print

Print 函数将参数写入标准输出,不添加任何格式或换行符。多个参数之间会以空格分隔,但不会自动换行。

Go 复制代码
	fmt.Print("Hello", "golang")
	fmt.Print(1, 2, 3)

输出结果:

Println

Println 的功能与 Print 类似,但会在输出结束后自动添加换行符。多个参数之间同样以空格分隔。

Go 复制代码
	fmt.Println("Hello", "golang")
	fmt.Println(1, 2, 3)

打印结果:

Printf

Printf 是格式化输出函数,允许通过占位符指定输出的格式。它不会自动添加空格或换行符,格式完全由用户控制。

Go 复制代码
	fmt.Printf("Name: %v, Age: %v\n", "Alice", 25)
	fmt.Printf("Name: %v, Age: %v", "Bob", 22)

打印结果:

也就是说 Printf 的第一个参数是格式字符串,后续参数会根据占位符替换格式字符串中的对应部分。

占位符

通用占位符
  • %v:默认格式,适用于任意类型(自动推导)。
  • %+v:输出结构体时添加字段名。
  • %#v:输出值的 Go 语法表示(如结构体的完整定义)。
  • %T:输出值的类型(如 intstring)。
  • %%:输出百分号 % 本身。
布尔占位符
  • %t:输出布尔值 truefalse
整数占位符
  • %b:二进制格式。
  • %c:对应的 Unicode 字符。
  • %d:十进制格式。
  • %o:八进制格式。
  • %O:带前缀 0o 的八进制格式(Go 1.13+)。
  • %x:小写十六进制(如 0x1a)。
  • %X:大写十六进制(如 0X1A)。
  • %U:Unicode 格式(如 U+1234)。
浮点数占位符
  • %b:科学计数法(如 123456p-5)。
  • %e:小写科学计数法(如 1.234567e+08)。
  • %E:大写科学计数法(如 1.234567E+08)。
  • %f:十进制浮点数(如 123.456000)。
  • %F:同 %f
  • %g:自动选择 %e%f(根据精度)。
  • %G:自动选择 %E%F(根据精度)。
字符串与字节切片占位符
  • %s:直接输出字符串或字节切片。
  • %q:带引号的字符串(如 "hello"),非 ASCII 字符会转义。
  • %x:小写十六进制(每字节两个字符)。
  • %X:大写十六进制(每字节两个字符)。
指针占位符
  • %p:输出指针地址(如 0x1400012e010),格式为十六进制带 0x 前缀。
宽度与精度控制

占位符可通过以下格式指定宽度和精度:%[宽度][.精度]动词

例如:

  • %5d:输出至少 5 位宽度的整数(右对齐)。
  • %.2f:输出保留 2 位小数的浮点数。
  • %10.3s:输出字符串的前 3 个字符,总宽度为 10(右对齐)。

总结

  • Print:简单输出,无换行,适合紧凑格式。
  • Println:简单输出,自动换行,适合调试和日志。
  • Printf:格式化输出,适合复杂格式需求。
相关推荐
风象南23 分钟前
SpringBoot 自研运行时 SQL 调用树,3 分钟定位慢 SQL!
spring boot·后端
Jenny27 分钟前
第九篇:卷积神经网络(CNN)与图像处理
后端·面试
大志说编程29 分钟前
LangChain框架入门16:智能客服系统RAG应用实战
后端·langchain·aigc
沸腾_罗强44 分钟前
Redis内存爆了
后端
天天摸鱼的java工程师1 小时前
Snowflake 雪花算法优缺点(Java老司机实战总结)
java·后端·面试
海梨花1 小时前
【从零开始学习Redis】项目实战-黑马点评D2
java·数据库·redis·后端·缓存
bug菌1 小时前
零基础也能做出AI应用?Trae是如何打破编程"高墙"的?
后端·ai编程·trae
Sammyyyyy1 小时前
2025年,Javascript后端应该用 Bun、Node.js 还是 Deno?
开发语言·javascript·node.js
Java技术小馆2 小时前
重构 Controller 的 7 个黄金法则
java·后端·面试