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:格式化输出,适合复杂格式需求。
相关推荐
谷哥的小弟2 分钟前
Spring Framework源码解析——PropertiesLoaderUtils
java·后端·spring·框架·源码
wyzqhhhh11 分钟前
京东啊啊啊啊啊
开发语言·前端·javascript
JIngJaneIL12 分钟前
基于java+ vue助农电商系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
雷中听风15 分钟前
使用字节的源安装rust
开发语言·后端·rust
q_191328469517 分钟前
基于Springboot+MySQL+RuoYi的会议室预约管理系统
java·vue.js·spring boot·后端·mysql·若依·计算机毕业设计
一只叫煤球的猫44 分钟前
从夯到拉,锐评13个Java Web框架
java·后端·程序员
特立独行的猫a1 小时前
C++开发中的Pimpl机制与类声明机制深度解析:现代C++的编译解耦艺术
开发语言·c++·pimpl
GoWjw1 小时前
在C&C++指针的惯用方法
c语言·开发语言·c++
heartbeat..1 小时前
JUC 在实际业务场景的落地实践
java·开发语言·网络·集合·并发
tryxr1 小时前
线程安全的类 ≠ 线程安全的程序
java·开发语言·vector·线程安全