Go 基准测试和分配入门:用 -benchmem 看清楚优化是否值得
面向 Go 初学者的基准测试实践:从 testing.B、-benchmem、字符串拼接、切片预分配到如何判断一次优化是否真的有价值。
tag
面向 Go 初学者的基准测试实践:从 testing.B、-benchmem、字符串拼接、切片预分配到如何判断一次优化是否真的有价值。
Go 安全编程:防范常见漏洞 安全是软件开发中最容易被忽视,却又最重要的环节。你可能写出功能完美、性能卓越的代码,但只要一个安全漏洞,就可能让整个系统崩溃,甚至导致用户数据泄露。今天,我们就来深入探讨 Go 语言中的安全编程实践,学习如何防范常见的安全漏洞。
深入探索 Go 1.23 的迭代器特性:range over function、iter 包、Seq/Seq2 模式、惰性求值、与 channel 的对比、性能分析
本文讲解如何用 Go 标准库 flag.FlagSet 实现 add、list、done 这类子命令,帮助初学者组织可维护命令行工具。
Go 项目结构:构建可维护的大型项目 你是否遇到过这样的场景:打开一个 Go 项目,看到所有代码都堆在 里,或者目录结构混乱得像一盘意大利面?随着项目规模增长,这种混乱的结构会让你每次修改代码都像是在拆炸弹——稍有不慎就会引发连锁反应。
Go 1.21 泛型增强:cmp 包与内置 min/max Go 1.18 引入泛型后,社区反响热烈,但也伴随着一些疑问:"泛型是好东西,但标准库什么时候能用上?" 这个疑问非常合理。Go 1.18 虽然引入了类型参数的语法,但标准库中几乎没有使用泛型的包。
本文讲解 Go HTTP ResponseController 的基本使用场景,包括 Flush、写入截止时间、流式响应、SSE 实现和请求取消监听,帮助理解响应控制边界。
全面掌握 Go 测试进阶技巧:表驱动测试、子测试、测试辅助、Mock 模式、集成测试、基准测试、模糊测试、覆盖率分析与 CI/CD 集成
深入探索 Go 1.21 引入的 cmp、slices、maps 三个标准库包,掌握基于 cmp.Ordered 约束的集合操作,告别手写循环
Go 1.21 将 slices、maps、cmp 包引入标准库,统一了 Contains、Clone、Equal、SortFunc 等常见操作。本文讲解用法、性能考量和升级旧工具函数的注意事项。
Go 1.21 slog:标准库的结构化日志 日志,是每个后端工程师绕不开的话题。你可能用过 、 、 这些第三方库,也可能还在用标准库的 包拼接字符串。不管怎样,Go 1.21 给你带来了一个"迟到但正确"的礼物—— 包。
全面掌握 Go HTTP 服务器的生产级模式:Go 1.22 增强路由、中间件、优雅停机、健康检查、Request ID、超时处理
本文讲解 Go HTTP 服务中 ReadTimeout、WriteTimeout、IdleTimeout 和请求 context 的基本用法,帮助初学者避免服务被慢请求拖住。
Go 1.20 新特性:让错误处理更优雅。2023 年 2 月,Go 1.20 正式发布。虽然不像 1.18 那样引入了泛型这样的重大特性,但 1.20 在错误处理、类型转换和性能方面带来了许多实用的改进。本文将带你深入了解 Go 1.20 的重要特性。
错误处理的高级技巧:从基础到企业级 Go 的错误处理以其简洁性著称,但简洁不等于简单。在实际项目中,我们需要处理复杂的错误场景:错误包装、错误链、错误分类、错误监控等。本文将带你从基础的错误处理进阶到企业级的错误处理策略。
Go 1.19:稳定中求进步 2022 年 8 月,Go 1.19 正式发布。虽然不像 1.18 那样引入了泛型这样的重大特性,但 1.19 在稳定性、性能和开发体验方面做了大量改进。这篇文章带你了解 Go 1.19 的重要变化。
深入学习 Go 的各种 Channel 使用模式,包括 Pipeline、Fan-in/Fan-out、Worker Pool 等经典并发模式
原子操作:无锁并发编程的艺术 在并发编程中,我们经常需要保护共享数据。传统的做法是使用互斥锁(mutex),但锁会带来性能开销和死锁风险。原子操作 提供了一种无锁的替代方案,在某些场景下性能更优。本文将深入探讨 Go 的 包,学习如何正确使用原子操作。
逃逸分析:理解 Go 的内存分配策略 在 Go 中,你不需要像 C/C++ 那样手动管理内存,但这并不意味着你可以忽视内存分配。理解 逃逸分析 (Escape Analysis)对于编写高性能的 Go 代码至关重要。
Go 1.18 any 类型:告别 interface{} 的冗长。Go 1.18 引入了一个简单但意义重大的改进:any 类型。它是 interface{} 的内置别名,让代码更加简洁易读。虽然只是一个小的语法改进,但它体现了 Go 团队对开发者体验的持续关注。