Go 语言中的格式化占位符

在 Go 语言中,fmt 包提供了大量的格式化占位符,用于格式化输出不同类型的数据。选择合适的占位符,可以确保输出的内容格式正确、清晰易懂。

常见的占位符:

基本类型
  • %v:按值的默认格式输出。适用于任何类型。
  • %+v:在 %v 的基础上,结构体会额外输出字段名。
  • %#v:输出 Go 语法表示的值。结构体会输出详细的字段信息和类型。
  • %T:输出值的类型。
  • %%:字面百分号(% 本身)。
整数类型
  • %d:十进制整数。
  • %b:二进制格式。
  • %o:八进制格式。
  • %x:十六进制格式(小写字母)。
  • %X:十六进制格式(大写字母)。
  • %c:相应 Unicode 码点的字符。
浮点数和复数
  • %f:标准浮点数表示(小数部分)。
  • %e:科学计数法表示(小写 e)。
  • %E:科学计数法表示(大写 E)。
  • %g:根据具体情况选择 %f%e 表示。
字符串和字节
  • %s:字符串。
  • %q:带双引号的字符串,安全转义。
  • %x:以十六进制表示字符串或字节切片。
  • %X:以大写十六进制表示字符串或字节切片。
布尔类型
  • %t:布尔值 (truefalse)。
指针
  • %p:指针的十六进制表示。

如何选择占位符:

选择占位符时,首先需要根据数据类型选择合适的格式化符号,具体情况如下:

  1. 输出通用数据类型

    • 使用 %v 是通用、默认的选择。如果你不确定类型,%v 可以输出所有类型的值。例如:

      go 复制代码
      logx.Infof("Result: %v", result)
  2. 输出结构体

    • 如果想要查看结构体的详细信息,可以使用 %+v 输出字段名和值,或者使用 %#v 输出 Go 语言格式的值。例如:

      go 复制代码
      logx.Infof("Struct data: %+v", myStruct)
      logx.Infof("Go syntax: %#v", myStruct)
  3. 输出字符串

    • 一般使用 %s 输出字符串;如果需要输出带双引号和转义字符的安全字符串,使用 %q。例如:

      go 复制代码
      logx.Infof("User input: %s", input)
      logx.Infof("Escaped string: %q", input)
  4. 输出整数

    • 使用 %d 输出十进制整数,如果需要以二进制或十六进制表示,可以分别使用 %b%x。例如:

      go 复制代码
      logx.Infof("User age: %d", age)
      logx.Infof("Memory address in hex: %x", pointer)
  5. 输出浮点数

    • 一般使用 %f 输出浮点数,输出带有小数部分;如果需要科学计数法表示,使用 %e%E。例如:

      go 复制代码
      logx.Infof("Price: %f", price)
      logx.Infof("Price in scientific notation: %e", price)
  6. 输出指针

    • 如果你需要输出一个指针的值,使用 %p 会显示其十六进制地址。例如:

      go 复制代码
      logx.Infof("Pointer address: %p", &myVar)

实际案例:

假设我们有如下数据:

go 复制代码
taskID := 12345
price := 1234.567
name := "Alice"
completed := true
myStruct := struct {
	ID   int
	Name string
}{
	ID:   1,
	Name: "TestTask",
}

使用占位符输出:

go 复制代码
logx.Infof("Task ID: %d", taskID)                // 输出十进制整数
logx.Infof("Price: %f", price)                   // 输出浮点数
logx.Infof("User: %s", name)                     // 输出字符串
logx.Infof("Task completed: %t", completed)      // 输出布尔值
logx.Infof("Task info: %+v", myStruct)           // 输出结构体,带字段名和值

占位符一览表:

占位符 说明 示例
%v 默认格式 logx.Infof("%v", 42)
%+v 结构体字段和值 logx.Infof("%+v", obj)
%#v Go 语法表示值 logx.Infof("%#v", obj)
%T 输出值的类型 logx.Infof("%T", obj)
%d 十进制整数 logx.Infof("%d", 123)
%b 二进制整数 logx.Infof("%b", 7)
%x 十六进制小写 logx.Infof("%x", 255)
%f 浮点数 logx.Infof("%f", 3.14)
%t 布尔值 logx.Infof("%t", true)
%p 指针地址 logx.Infof("%p", ptr)
%s 字符串 logx.Infof("%s", "abc")
%q 带双引号的字符串 logx.Infof("%q", "abc")

通过根据数据类型选择正确的占位符,可以确保输出信息的格式化和可读性。

相关推荐
浮生如梦_1 小时前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
XiaoLeisj2 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck2 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei2 小时前
java的类加载机制的学习
java·学习
励志成为嵌入式工程师3 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉3 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer3 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Yaml44 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~4 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616884 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端