go学习笔记:Go 语言中的 fmt.Sprintf的用法
sprintf 是 C 语言中的字符串格式化函数,在 Go 语言中对应的是 fmt.Sprintf。以下是详细用法:
Go 语言中的 fmt.Sprintf
基本语法
fmt.Sprintf(format string, a ...interface{}) string
常用格式说明符
1. 字符串格式化
name := "张三"
age := 25
result := fmt.Sprintf("姓名:%s,年龄:%d", name, age)
// 输出:姓名:张三,年龄:25
2. 数字格式化
// 整数
num := 42
result := fmt.Sprintf("数字:%d", num) // 十进制
result = fmt.Sprintf("十六进制:%x", num) // 小写十六进制
result = fmt.Sprintf("十六进制:%X", num) // 大写十六进制
result = fmt.Sprintf("八进制:%o", num) // 八进制
result = fmt.Sprintf("二进制:%b", num) // 二进制
// 浮点数
price := 123.456
result = fmt.Sprintf("价格:%.2f", price) // 保留2位小数
result = fmt.Sprintf("价格:%f", price) // 默认精度
result = fmt.Sprintf("科学计数:%e", price) // 科学计数法
3. 宽度和精度控制
num := 42
result := fmt.Sprintf("右对齐:%5d", num) // 宽度5,右对齐
result = fmt.Sprintf("左对齐:%-5d", num) // 宽度5,左对齐
result = fmt.Sprintf("补零:%05d", num) // 宽度5,用0填充
price := 123.456
result = fmt.Sprintf("价格:%8.2f", price) // 宽度8,精度2
4. 布尔值和指针
flag := true
result := fmt.Sprintf("状态:%t", flag) // 布尔值
ptr := &flag
result = fmt.Sprintf("指针:%p", ptr) // 指针地址
5. 通用格式
value := 42
result := fmt.Sprintf("通用格式:%v", value) // 默认格式
result = fmt.Sprintf("详细格式:%+v", value) // 详细格式
result = fmt.Sprintf("类型信息:%T", value) // 类型信息
实际应用示例
1. 数据库连接字符串(你代码中的用法)
dbHost := "localhost"
dbPort := "3306"
dbUser := "root"
dbPass := "password"
dbName := "testdb"
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
dbUser, dbPass, dbHost, dbPort, dbName)
// 输出:root:password@tcp(localhost:3306)/testdb?charset=utf8mb4&parseTime=True&loc=Local
2. 文件路径拼接
basePath := "/home/user"
filename := "data.txt"
fullPath := fmt.Sprintf("%s/%s", basePath, filename)
3. 日志格式化
level := "INFO"
message := "用户登录成功"
timestamp := "2024-01-01 12:00:00"
log := fmt.Sprintf("[%s] %s - %s", timestamp, level, message)
4. 错误信息格式化
err := errors.New("连接失败")
result := fmt.Sprintf("操作失败:%v", err)
常用格式说明符总结
| 说明符 | 类型 | 说明 |
|---|---|---|
%s |
string | 字符串 |
%d |
int | 十进制整数 |
%f |
float | 浮点数 |
%t |
bool | 布尔值 |
%p |
pointer | 指针 |
%v |
interface{} | 默认格式 |
%+v |
interface{} | 详细格式 |
%T |
interface{} | 类型信息 |
%x |
int | 十六进制(小写) |
%X |
int | 十六进制(大写) |
%o |
int | 八进制 |
%b |
int | 二进制 |
注意事项
- 参数顺序:格式说明符的顺序必须与参数顺序一致
- 类型匹配:确保格式说明符与参数类型匹配
- 性能:对于简单字符串拼接,
+操作符可能比fmt.Sprintf更快 - 错误处理:
fmt.Sprintf不会返回错误,但格式错误可能导致意外输出
这就是 fmt.Sprintf 的主要用法,它是 Go 语言中非常实用的字符串格式化工具!
go学习笔记:Go 语言中的 fmt.Sprintf的用法的更多相关文章
- 《C语言深度剖析》学习笔记----C语言中的符号
本节主要讲C语言中的各种符号,包括注释符.单引号双信号以及逻辑运算符等. 一.注释符 注释符号和注释在程序的预编译期就已经被解决了,在预编译期间,编译器会将注释符号和注释符号之间的部分简单的替换成为空 ...
- C语言学习笔记--C语言中的宏定义
1. C 语言中的宏定义 (1)#define 是预处理器处理的单元实体之一(因此,预处理器只是简单的进行替换,并不(2)#define 定义的宏可以出现在程序的任意位置(包括函数体的内部)(3)#d ...
- C语言学习笔记--C语言中变量的属性关键字
变量属性关键字的使用语法:property type var_name; 1.auto 关键字 auto关键字是C语言中局部变量的默认的关键字,C编译器默认所有的局部变量都是auto的,它表明了被修饰 ...
- C语言学习笔记--C语言中的逗号表达式
逗号表达式:exp1,exp2,epx3,...,expN; (1)逗号表达式是 C 语言中的“粘贴剂” (2)逗号表达式用于将多个子表达式连接为一个表达式 (3)逗号表达式的值为最后一个子表达式的值 ...
- 【学习笔记】C#中HashTable和快速排序的用法,从单词频率统计小程序写起
先瞎扯点别的.进入这个神圣的地方总需要些鞭策,阿西巴,我是被鞭策进来摆摊的程序猿.软件工程老师说,写程序,发博客,就来博客园.这是个号召力很强的口号.最近看网络营销 搜索引擎优化的书多一些,只能说王老 ...
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- IOS学习笔记07---C语言函数-printf函数
IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
随机推荐
- AI工具 Cursor + MCP服务:提效与落地的完美组合
在当今软件开发快速演进的时代,开发者们越来越依赖于人工智能辅助工具来提升效率与质量.最近我在实际项目中深度使用了 Cursor 编辑器 和 MCP(Model Context Protocol)服务, ...
- 【TrafficMonitor】无法显示13代intel的CPU温度
原因分析 TrafficMonitor的温度检测是利用了第三方软件LibreHardwareMonitor,并且这个问题可能与CPU有关 按照作者的指示,我们下载并启动了最新的LibreHardwar ...
- python的 range() 函数
python range() 函数可创建一个整数列表,一般用在 for 循环中. range(start, stop[step]) range(10) # 从 0 开始到 10 [0, 1, 2, 3 ...
- MATLAB 打开报错:错误使用eval,未定义与‘struct‘类型的输入参数相对应的函数‘workspacefunc‘(MAC OS情况下)
MAC OS情况下遇到这个问题比win会麻烦一点点 第一步:在Matlab中打开文件夹 打开文件夹/Volumes/自己的安装位置/MATLAB_R2022b.app/toolbox/local 第二 ...
- SonarQube的使用
一.简单介绍 SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码异味.它可以与您现有的工作流程集成,以便在项目分支和拉取请求之间进行连续的代码检查,在很多企业中都会使用到,进行 ...
- Java 内存模型与 Happens-Before 关系深度解析
在 Java 并发编程中,Java 内存模型(Java Memory Model, JMM)与 Happens-Before 关系是理解多线程数据可见性和有序性的核心理论.本文从 JMM 的抽象模型出 ...
- 干货大分享!带你了解数栈批流统一的高效数据同步插件—FlinkX
一.什么是FlinkX FlinkX是一款基于Flink的分布式离线/实时数据同步插件,可实现多种异构数据源高效的数据同步,其由袋鼠云于2016年初步研发完成,目前有稳定的研发团队持续维护,已在Git ...
- Claude Code 深夜也要加班?这个神器让 AI 自动续命!
你有没有遇到过这种情况? 晚上熬夜用 Claude Code 写代码,正写到关键时刻,突然弹出:"Claude usage limit reached. 恢复时间:凌晨 3 点" ...
- Jquery获取div的宽度与高度
https://blog.csdn.net/qq2468103252/article/details/82835563 宽度$('div').width(); 区块的本身宽度$('div').oute ...
- VS 0xc000007b错误 解决方案
VS 0xc000007b错误 解决方案 这个原因是相关的DLL动态库没有放到和sln同一级目录.