go语言输出_Print、Println、Printf及字符串格式化全解
发布时间 - 2026-02-01 00:00:00 点击率:次根本区别在于参数处理方式:Print/Println是值导向,直接输出任意数量的值;Printf是格式导向,首参必须为格式字符串,否则panic。
为什么 Print、Println、Printf 输出结果看起来“不一样”
根本区别不在“换行”或“格式”,而在于参数处理方式:Print 和 Println 是“值导向”的,直接输出任意数量的值(支持 interface{});Printf 是“格式导向”的,第一个参数必须是格式字符串,后续参数按顺序填充占位符。
常见误用:把变量直接塞进 Printf 第一个位置,比如 Printf(x) —— 这会触发 panic:fmt: Printf call needs 2+ arguments, but has only 1。因为 Printf 强制要求格式串。
-
Print("hello", 42, true)→ 输出hello42true(无分隔,无换行) -
Println("hello", 42, true)→ 输出hello 42 true\n(空格分隔,末尾自动换行) -
Printf("hello %d %t", 42, true)→ 输
出
hello 42 true(无自动换行,需手动加\n)
Printf 中 %v、%+v、%#v 到底怎么选
这三个都是通用打印动词,但语义差异明显,尤其在调试结构体时容易混淆:
-
%v:默认值格式,字段名不显示,只输出值,如{1 "abc"} -
%+v:带字段名,适合快速确认结构体内容,如{X:1 Name:"abc"} -
%#v:Go 语法格式,可直接复制粘贴为代码字面量,如main.User{X:1, Name:"abc"}
注意:%#v 对 map/slice 也会输出完整类型信息(如 map[string]int{"a": 1}),但对未导出字段(小写开头)仍不可见 —— 这不是 bug,是 Go 反射机制限制。
字符串拼接用 fmt.Sprintf 还是 strings.Builder
如果目标是“构造字符串”,别无脑用 Sprintf。它每次调用都分配新内存、做格式解析,性能开销明显。
- 少量、简单拼接(≤3 次,变量少):用
Sprintf更直观,如msg := Sprintf("user %s id %d", name, id) - 高频、循环内拼接(如日志批量生成):必须用
strings.Builder,避免重复 alloc:var b strings.Builder b.Grow(128) b.WriteString("user ") b.WriteString(name) b.WriteString(" id ") b.WriteString(strconv.Itoa(id))
Builder.String() 是零拷贝的(内部 slice 直接转 string),而 Sprintf 总是新建字符串。
中文乱码?os.Stdout 的编码其实不归 fmt 管
fmt 包本身不处理字符编码,它只是把 []byte 写给 os.Stdout。乱码本质是终端/IDE 的编码设置与 Go 字符串(UTF-8)不匹配,或 Windows 控制台默认非 UTF-8。
- Windows 命令行下,先执行
chcp 65001切到 UTF-8 - VS Code 终端:检查右下角编码是否为 UTF-8,不是就点击切换
- 程序里硬编码
os.Stdout.Write([]byte("你好"))和Println("你好")行为一致 —— 都依赖底层 io.Writer 实现
真正要干预输出编码,得替换 os.Stdout,比如用 golang.org/x/text/encoding 包套一层 writer,但绝大多数场景没必要 —— 修复环境比改代码更可靠。
# go
# windows
# golang
# go语言
# 编码
# 中文乱码
# ai
# win
# vs code
# 区别
# 为什么
# print
# String
# printf
# 字符串
# 结构体
# int
# 循环
# Interface
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
原生JS实现图片轮播切换效果
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Swift中swift中的switch 语句
Laravel如何使用Livewire构建动态组件?(入门代码)
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
lovemo网页版地址 lovemo官网手机登录
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
php json中文编码为null的解决办法
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
中山网站推广排名,中山信息港登录入口?
如何在建站之星网店版论坛获取技术支持?
如何在建站主机中优化服务器配置?
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
Laravel怎么在Blade中安全地输出原始HTML内容
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
Laravel如何配置和使用缓存?(Redis代码示例)
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
如何在企业微信快速生成手机电脑官网?
浅谈javascript alert和confirm的美化
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
如何快速生成ASP一键建站模板并优化安全性?
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何在Windows环境下新建FTP站点并设置权限?
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
Bootstrap整体框架之JavaScript插件架构
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
如何用好域名打造高点击率的自主建站?
php打包exe后无法访问网络共享_共享权限设置方法【教程】
高端网站建设与定制开发一站式解决方案 中企动力
UC浏览器如何设置启动页 UC浏览器启动页设置方法
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
如何解决hover在ie6中的兼容性问题
网站建设保证美观性,需要考虑的几点问题!


