跳到主要内容

Go 里用 slice 实现栈和队列时,别忽略这几个细节

· 阅读需 3 分钟
一介布衣
全栈开发者

用 slice 实现栈和队列几乎是 Go 入门练习里的必做题。因为语法不复杂,append 也足够顺手,所以很多人会觉得这类题没什么难度。但真正把它写进稍微像样一点的小程序里时,你会发现问题并不在“会不会写”,而在“有没有考虑清楚容量变化、出队后残留引用、空结构操作这些细节”。

Go 练习题里最值得反复写的一类:递归和二分查找

· 阅读需 4 分钟
一介布衣
全栈开发者

很多人刷算法题时喜欢挑复杂题,觉得这样更有挑战。但从练代码基本功的角度看,真正值得反复写的,往往是那些规则简单、边界丰富的小题。递归和二分查找就是这种题型的代表。它们不靠花哨技巧取胜,却非常适合训练你是不是能把停止条件、输入约束和函数职责写清楚。

Go 里 struct tag、JSON 编解码的几个稳妥习惯

· 阅读需 4 分钟
一介布衣
全栈开发者

Go 标准库里的 encoding/json 已经够用了,平时做接口、配置读取、消息体解析,大多数场景都离不开它。问题在于,很多初学阶段写出来的 JSON 代码“能跑”但并不稳。真正进入接口联调或者服务之间互相调用时,字段命名、默认值、空值含义这些细节很快就会冒出来。

Go 里什么时候该用 strings.Builder,什么时候该用 bytes.Buffer

· 阅读需 4 分钟
一介布衣
全栈开发者

刚开始写 Go 的时候,遇到文本拼接最容易想到的还是 +。代码少时当然没问题,但一旦进入循环、日志拼接、模板前处理或者接口响应组装,这种写法很快就会让代码既不清晰,也不够稳妥。真正开始做一些小工具之后,我发现自己最常用的其实不是花哨技巧,而是把 strings.Builder 和 bytes.Buffer 的边界分清楚。

Docker Compose 网络别名,能把本地联调变得更像线上

· 阅读需 2 分钟
一介布衣
全栈开发者

容器化本地开发有一个很常见的问题:服务虽然都起来了,但互相调用时用的地址特别随意。今天写死一个容器名,明天改成宿主机端口,后天又因为换了 compose 文件把连接地址全部推倒重来。结果是,本地联调环境虽然能跑,却总和线上长得不太一样。

想让 webpack 缓存真正生效,chunk 命名和依赖稳定性要一起管

· 阅读需 3 分钟
一介布衣
全栈开发者

很多项目第一次做 webpack 缓存优化,都会先把文件名改成带 hash,觉得这样浏览器就能长期缓存了。这个方向没错,但如果 chunk 划分本身不稳定、运行时代码老是跟着变化、公共依赖和业务代码混在一起,最后会发现缓存命中率并没有想象中高。

source map 不是越全越好,排查和发布环境要分开选型

· 阅读需 3 分钟
一介布衣
全栈开发者

webpack 配 source map 时,很多人最开始只有一个判断标准:能不能在浏览器里看到原始源码。可项目一大以后,你会发现 source map 其实牵连了很多事,构建速度、调试精度、错误定位、产物暴露范围,全都和它有关。选型如果只看“调试爽不爽”,很容易在发布阶段踩坑。