分类: 语言教程

array_walk 递归与引用传参修改嵌套数组的坑

用 array_walk 配合递归去"顺手"修改嵌套数组,是 PHP 里一个特别容易踩雷的写法。表面上看,回调函数里写了 $value = ...,跑完 print_r 却毫无变化;或者小心翼翼加上 &$value,结果顶层改了、深层没改;再或者想用 array_walk_recursive 一把梭,却发现它拿不到父级键名,也没法直接替换整个子树。这

生命周期省略规则下 fn 返回引用的三种消除路径

写 Rust 的时候,只要函数签名里出现 & 而返回值又是引用,编译器就很可能甩出一串 error[E0106]: missing lifetime specifier。新手常见的反应是随手加 'a,加完发现 borrow checker 又在调用点报错,于是继续加,最后把一个本来十行的函数写成生命周期标注的涂鸦墙。 真正需要理解的是:省略规则(lifeti

映射类型 remove 修饰符 -readonly 与 -? 的组合效果

写表单状态、配置对象、API 返回数据这些类型时,几乎每个人都遇到过同一类麻烦:上游类型把字段标成了 readonly,下游需要可写副本;上游把字段标成可选 ?,下游需要一份字段齐全的完整对象。手写一个新 interface 能解决,但字段一多就会和上游脱节——上游加字段,下游忘了同步,编译不报错,运行时才炸。TypeScript 的映射类型(mapped

Comparator 链式比较中 thenComparing 与 nullsFirst 的组合用法

写业务代码时经常遇到这种场景:一个 List 里装着一批订单或用户对象,要先按主字段排序,主字段相等再按次字段排序,而某些字段本身允许为 null。直接写 Comparator.comparing(Order::getAmount).thenComparing(Order::getCreateTime),一旦遇到 null 字段就会在读数据时抛 NullPo

itertools.groupby 分组的预排序陷阱与替代写法

itertools.groupby 是 Python 标准库里最容易被误用的函数之一。它的签名看起来像 SQL 的 GROUP BY,但语义完全不同:它只合并相邻的相同键,不做全局汇总。于是「忘了先排序」成了高频事故——数据没报错、结果却悄悄少了行或者多了组。这篇教程把 groupby 的真实语义、四种常见翻车现场、排序键的挑选技巧,以及 sort + gr

Go 的 context.WithCancel 与 goroutine 泄漏排查要点

线上 Go 服务跑着跑着 RSS 从 80MB 涨到 900MB,GOMAXPROCS 没变、QPS 没涨,runtime.NumGoroutine() 却在单调上升——这类问题十有八九和 context.WithCancel 用得不对有关。本文从一次真实的内存增长切入,讲清 WithCancel 的传播语义、四种最常见的泄漏写法、如何用 pprof 和 g