JSON 处理:Go 与数据交换的桥梁
JSON 处理:Go 与数据交换的桥梁 如果你在做 Web 开发,那你几乎每天都会和 JSON 打交道。JSON(JavaScript Object Notation)已经成为当今互联网最流行的数据交换格式——API 返回 JSON,配置文件用 JSON,消息队列里传输的也是 JSON。
posts
JSON 处理:Go 与数据交换的桥梁 如果你在做 Web 开发,那你几乎每天都会和 JSON 打交道。JSON(JavaScript Object Notation)已经成为当今互联网最流行的数据交换格式——API 返回 JSON,配置文件用 JSON,消息队列里传输的也是 JSON。
文件 I/O:Go 的文件操作全攻略 几乎所有程序都需要和文件打交道——读配置文件、写日志、处理用户上传的图片、导出数据到 CSV……文件操作是编程中最基础也最实用的技能之一。Go 语言在文件 I/O 方面设计得非常优雅。它基于 Unix 哲学——"一切皆文件",用统一的接口( 和 )处理各种 I/O 操作。
Context:并发控制的指挥棒 在构建真实的 Go 应用时,你经常会遇到这样的场景: 这些场景都涉及到 跨 goroutine 的控制流管理 ——怎么告诉一组相关的 goroutine "该停了"或"带上这个信息"。
sync 包:Go 的同步工具箱 前两篇文章我们学了 goroutine 和 channel——Go 并发编程的两大利器。但现实中,不是所有并发问题都适合用 channel 来解决。有时候你只需要保护一小段临界区代码,用 channel 反而显得笨重。
Channel:Go 并发的灵魂 上一篇我们学了 goroutine,但只学会了启动它们。有一个问题还没解决: goroutine 之间怎么交流? 在传统的并发编程中,线程之间通常通过 共享内存 来通信——比如共享变量加锁。这种方式容易出错,你忘了加锁、忘了释放锁、不小心造成死锁……各种坑。
Goroutine:Go 的并发魔法 如果你问我 Go 语言最酷的特性是什么,我会毫不犹豫地回答: goroutine 。在当今这个多核 CPU 普及的时代,并发编程已经不是什么新鲜事了。但传统的并发模型——不管是 Java 的线程、Python 的多进程,还是 Node.
路径问题经常在换系统后暴露 很多 Go 初学者在 macOS 或 Linux 上写路径时,会直接拼字符串: 这在类 Unix 系统上通常能跑,但到了 Windows,路径分隔符、盘符、绝对路径规则都可能不同。Go 标准库提供了 专门处理本地文件路径,提供了 处理 URL 路径这类斜杠分隔路径。
本文讲解 Go build 常用参数、ldflags 注入版本号、GOOS/GOARCH 交叉编译和运行时环境变量读取,帮助初学者发布小工具。
本文讲解 Go 中 math/rand 和 crypto/rand 的区别,说明如何生成测试随机数、业务随机值和安全 Token。
密码不是普通字符串 做用户系统时,最危险的错误之一是把密码当普通字符串存进数据库。数据库一旦泄漏,所有用户密码都会直接暴露。更糟的是,很多用户会在多个网站重复使用密码,你的泄漏会影响他们在其他服务上的账号。
本文讲解 Go 标准库中 compress/gzip、archive/tar 和 archive/zip 的基本使用方式,帮助初学者处理日志压缩和文件打包。
本文讲解 Go encoding/xml 的结构体标签、属性解析、嵌套元素、编码输出和流式解码,适合需要对接 XML 数据的初学者。
CSV 是最朴素也最常见的数据交换格式 很多系统导入导出数据时,最后都会落到 CSV:用户列表、订单明细、库存表、运营报表、日志统计结果。CSV 看起来只是逗号分隔文本,但真正处理时会遇到引号、换行、空字段、表头、编码和字段数量不一致等问题。不要自己用 解析 CSV,标准库已经提供了 。
本文讲解 io.Reader、io.Writer、io.Copy、bytes.Buffer 和 strings.Reader,帮助初学者理解 Go 标准库的数据流抽象。
空接口能装任何值,但代价是你要自己判断 Go 里 是一个很特别的类型。因为它没有要求任何方法,所以所有类型都实现了它。字符串、整数、结构体、切片、指针,都可以赋给 。这让它很灵活,也很容易被滥用。灵活的代价是类型信息变弱。函数接收 后,编译器无法帮你确认调用者传的到底是不是你想要的类型。
没有泛型时,Go 依然能写可维护代码 在 2020 年学习 Go,一个经常被问到的问题是:Go 没有泛型,遇到重复代码怎么办?比如要写 的查找,又要写 的查找;要写通用队列,又要处理不同类型;要写工具函数,又不想复制很多版本。这个问题很真实,但答案不是“到处用 ”,也不是“所有重复都必须消灭”。
本文讲解 Go 早期项目中如何使用 http.FileServer、目录资源、模板文件和运行路径处理静态文件,为理解后续 embed 思路打基础。
调试不是乱试,而是缩小问题范围 写 Go 时,bug 可能来自很多地方:变量被遮蔽、切片共享底层数组、map 遍历顺序不稳定、JSON 字段没导出、goroutine 没退出、并发写 map、错误被忽略。
本文讲解 Go Modules 的依赖添加、版本选择、go.sum、go mod tidy、replace 和常见排错方式,帮助初学者管理项目依赖。
业务代码里到处都是排序 文章按发布时间倒序,订单按金额排序,排行榜按分数排序,后台列表按状态和创建时间排序。排序看起来是基础算法,但在业务代码里非常常见。Go 标准库的 包提供了常用能力:排序字符串、整数、浮点数,按自定义规则排序结构体切片,做稳定排序和二分搜索。