Go中保存结构体为JSON文件需用encoding/json.Marshal序列化并os.WriteFile写入,字段须大写导出,推荐用struct tag控制键名和omitempty等行为,支持MarshalIndent生成格式化JSON及直接序列化结构体切片。
在 Go 语言中,将结构体数据保存为 JSON 文件非常简单,核心是使用 encoding/json 包的 json.Marshal 序列化数据,再用 os.WriteFile(或 ioutil.WriteFile,已弃用)写入文件。
Go 默认只导出首字母大写的字段,且 JSON 键名默认为字段名。推荐显式使用 struct tag 控制键名、忽略空值等:
例如:
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email,omitempty"` // 空字符串时不会出现在 JSON 中
IsActive bool `json:"is_active"`
}
使用 json.Marshal 转为字节切片
,再用 os.WriteFile 保存到磁盘:
json.Marshal 是否返回错误(如含不可序列化字段:func、channel、map[interface{}]string 等)0644)示例代码:
user := User{ID: 1, Name: "Alice", Email: "", IsActive: true}
data, err := json.Marshal(user)
if err != nil {
log.Fatal("JSON 编码失败:", err)
}
err = os.WriteFile("user.json", data, 0644)
if err != nil {
log.Fatal("写入文件失败:", err)
}
若需人类可读的换行与缩进,用 json.MarshalIndent 替代 Marshal:
data, err := json.MarshalIndent(user, "", " ") // 2个空格缩进
if err != nil {
log.Fatal(err)
}
os.WriteFile("user_pretty.json", data, 0644)
支持直接序列化 []User 类型,无需额外循环:
users := []User{
{ID: 1, Name: "Alice", IsActive: true},
{ID: 2, Name: "Bob", IsActive: false},
}
data, _ := json.MarshalIndent(users, "", " ")
os.WriteFile("users.json", data, 0644)
# js
# json
# go
# golang
# 编码
# 字节
# ai
# String
# 结构体
# 循环
# Struct
# Interface
# 切片
# map
# channel
# 序列化
# 再用
# 键名
# 首字母
# 字段名
# 出现在
# 保存为
# 需用
# 默认为
# 换行
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
如何使用Golang构建基础消息队列模拟_Golang消息发送与消费实现方法
Windows系统被恶意软件破坏后的恢复策略_错误提示修复方式
短链接还原php提示内存不足_调整PHP内存限制设置【技巧】
php后缀怎么变mp4能播放_让php伪装mp4正常播放的技巧【技巧】
如何在包含多值的列中精准搜索指定演员?
Windows10系统更新错误0x80070002_Win10自动更新失败手动修复
Windows Defender扫描失败怎么办_安全模块损坏修复方式
如何在Golang中实现文件下载_Golang文件传输与内容类型处理方法
Windows10如何查看蓝屏日志_Win10使用事件查看器分析Dump文件
Win10如何备份驱动程序_Win10驱动备份步骤【攻略】
如何关闭Win10自动更新更新_Win10系统自动更新双重关闭技巧
Windows蓝屏BAD_POOL_HEADER故障详解_蓝屏池损坏错误修复指南
Python项目回滚策略_发布安全说明【指导】
Go 中 := 短变量声明的类型推导机制详解
LINUX下如何配置VLAN虚拟局域网_在LINUX交换机与服务器上的实现
使用类变量定义字符串常量时的类型安全最佳实践
Linux如何安装Golang环境_Linux下Go语言开发包配置【方法】
如何使用Golang搭建Web开发环境_快速启动HTTP服务
VSC怎么配置PHP的Xdebug_远程调试设置步骤【详解】
如何使用Golang实现容器自动化运维_Golang Docker运维管理方法
c++的STL算法库find怎么用 在容器中查找指定元素【实用教程】
MySQL 中使用 IF 和 CASE 实现查询字段的条件转换
Windows10蓝屏代码DPC_WATCHDOG_VIOLATION_Win10死机修复指南
c++怎么使用std::filesystem遍历文件夹_c++ 递归查找文件与权限修改【技巧】
Win10怎样安装PPT模板_Win10安装PPT模板教程【步骤】
手机php怎么转mp4_手机端php文件转mp4app推荐【指南】
Win11怎么开启剪贴板历史记录_Windows11 Win+V键使用技巧
win11 OneDrive怎么彻底关闭 Win11禁用并卸载OneDrive教程【分享】
如何使用Golang读取日志文件_Golang bufio Scanner日志处理示例
如何在Windows上设置闹钟和计时器_系统自带的时钟应用全攻略【生活技巧】
如何诊断并终止卡死的 multiprocessing 子进程
Win11怎么更改文件夹图标_自定义Win11文件夹外观样式【详解】
Win11键盘快捷键大全_Windows 11常用高效快捷键汇总【技巧】
为什么本地php环境运行php脚本卡顿_php执行效率优化方法与设置【说明】
c# await 一个已经完成的Task会发生什么
Windows10如何重置此电脑_Windows10电脑重置方法【步骤】
Windows10怎么查看系统激活状态_Windows10激活状态查看方法【教程】
Windows怎样拦截WPS弹窗广告_Windows拦截WPS弹窗广告设置【步骤】
Python对象生命周期管理_创建销毁解析【教程】
Win11怎么更改鼠标指针_Windows 11自定义鼠标样式与大小【美化】
php订单日志怎么按状态筛选_php筛选不同状态订单日志教程【教程】
Python文件管理规范_工程实践说明【指导】
如何在 Go 后端安全获取并验证前端存储的 JWT?
如何用正则表达式精确匹配最多含一个换行符的起止片段
Win11怎么开启专注模式_Windows11时钟应用Focus Session
Linux怎么查找死循环进程_Linux系统负载分析与进程彻底结束【教程】
php命令行怎么运行_通过CLI模式执行PHP脚本的步骤【说明】
Mac怎么查看活动监视器_理解Mac进程和资源占用【指南】
c++如何实现一个高性能的环形队列(Ring Buffer)_c++无锁实现方法【并发】
Mac的Time Machine怎么用_Mac系统备份与数据恢复【完整指南】
2026-01-01
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。