Go问答技术文章
-
Go embedding 的字段冲突要先看选择器路径:同层同名会产生歧义,外层同名会隐藏嵌入字段,而方法提升还要单独检查签名与显式调用路径。本文用最小示例说明如何定位并修复。438 收藏 -
Go embedding 会把嵌入字段的部分方法提升到外层结构体,但值与指针接收者仍受方法集规则限制。本文用字段路径、同名冲突和接口赋值说明如何正确读取与转换。199 收藏 -
Go 的方法集决定类型能否实现接口。本文用指针接收者、自动取地址、嵌入和 map 元素几个边界,说明如何稳定限定 T 与 *T 的实现范围。173 收藏 -
Go 中值变量能调用指针接收者方法,不代表值类型实现了接口。本文用方法集和接口赋值两个边界定位这类编译错误。235 收藏 -
Go 的 T 与 *T 方法集并不相同。本文用接口赋值、可寻址变量和方法表达式拆开指针方法的调用与转换边界,帮你定位 method has pointer receiver 编译错误。253 收藏 -
Go 类型断言如何限定接口范围?本文说明具体类型断言与接口类型断言的区别,演示 comma-ok、安全探测、最小接口和 type switch 的取舍。419 收藏 -
Go 类型断言报错时,先确认接口中的动态类型,再用双返回值和 %T 定位原因,并区分 nil 接口与 typed nil,避免用 panic 掩盖输入协议问题。215 收藏 -
Go 中的 assert 通常指接口类型断言。本文比较单值断言、逗号 ok 和 type switch,说明动态类型读取、失败处理以及 nil 边界。172 收藏 -
解释 Go sort.SliceStable 如何保持排序键相等元素的原始顺序,对比 sort.Slice 的选择边界,并给出单字段与多字段排序示例。245 收藏 -
Go 编译缓存变大时,先用 go env 找到 GOCACHE 和 GOMODCACHE,再按构建、测试、模块下载和 fuzz 缓存分别选择 go clean 参数,避免误删依赖源码。412 收藏 -
竞态修复后吞吐下降不一定是锁竞争。本文用 mutex profile、block profile 和固定基线,判断新增临界区是否真正造成吞吐损失。430 收藏 -
Go runtime.GOMAXPROCS 改小后延迟变高,常见原因是可运行 goroutine 受限后排队等待;但在容器中设得过大又可能触发 CPU throttling。本文从 CPU 配额、调度并行度和尾延迟三条线说明如何判断参数边界。497 收藏 -
Go 的 log.Fatal 不是普通错误日志,它在输出消息后调用 os.Exit(1)。库代码一旦使用它,调用方进程会被直接终止。本文说明原因、defer 边界、正确的 error 返回方式,以及应用入口该如何接管退出策略。139 收藏 -
Go 自定义错误只实现 Error() 时,errors.Is 可能无法匹配底层错误或业务哨兵。本文区分 Unwrap、Is 与 As,并给出错误链、语义匹配和常见坑的处理方法。130 收藏 -
Go init 函数一多,启动顺序难查通常不是 init 本身失控,而是包级变量依赖、文件呈现顺序和隐藏副作用混在了一起。本文给出依赖定位、显式构造和重构检查方法。238 收藏