Go 语言中 for 和 range 的性能比较

Go 里 `for` 和 `range` 都能完成遍历,但性能差异并不取决于语法本身,而是取决于元素类型和是否发生拷贝。结合切片、结构体、指针、map 与 channel 的基准结果,可以更准确地判断什么时候该优先可读性,什么时候该回到索引循环。

Go 语言中 for 和 range 的性能比较

Go 原生模糊测试 Fuzzing 让 bug 无处遁形

Go 1.18 把模糊测试直接带进了标准库 testing,重点不是替代单元测试,而是用海量随机、畸形输入去撞出你没预设到的边界问题。本文结合字符串反转示例,讲清它的工作机制、写法、报错原因和适合落地的场景。

Go 原生模糊测试 Fuzzing 让 bug 无处遁形

Go 里的 io.Discard,不只是“丢数据”这么简单

`io.Discard` 是 Go 标准库里一个很小却很常用的对象:它实现了 `io.Writer`,但会把写入的数据直接丢掉。真正值得关注的不是“丢弃”本身,而是它在 HTTP 连接复用、日志开关、网络读取和测试替身中的实际价值,以及 `ReadFrom` 带来的性能收益。

Go 里的 io.Discard,不只是“丢数据”这么简单

轻松掌握 Go 泛型,提升代码复用和类型安全

Go 1.18 引入泛型后,开发者终于不用在“重复写同类代码”和“用 interface{} 换灵活性”之间做取舍。本文从概念、基本写法、常见场景到使用边界梳理 Go 泛型,帮助你判断它何时值得上、何时不必强用。

轻松掌握 Go 泛型,提升代码复用和类型安全

Go 升级时别只会编译报错:把 go fix 用到位

Go 版本升级时,最麻烦的往往不是编译报错本身,而是旧 API、旧写法和标准库迁移带来的批量修改。`go fix`就是 Go 工具链里专门处理这类问题的自动修复工具,适合在升级前后快速完成兼容性清理,并配合 diff 与测试控制风险。

Go 升级时别只会编译报错:把 go fix 用到位

面试官问 go vet 时,怎样回答更到位?

`go vet` 是 Go 工具链自带的静态分析工具,专门查找“能编译但写得可疑”的代码。它不替代测试和代码审查,却很适合在面试回答、日常开发和 CI 流程里说明价值:发现格式化输出、布尔表达式、锁复制、闭包变量等常见隐患。

面试官问 go vet 时,怎样回答更到位?

Go 语言的 channel 到底需不需要关闭?这次讲清楚

Go 里的 channel 不是“创建了就要 close”的资源对象,是否关闭取决于接收方是否需要一个“不会再有数据”的明确信号。本文按常见并发场景拆开讲清:哪些情况必须关,哪些情况完全不用关,以及多生产者场景该怎样安全收尾。

Go 语言的 channel 到底需不需要关闭?这次讲清楚