Go问答技术文章
-
本文从 go/types.Info.InitOrder 出发,说明 Go 如何整理包级变量初始化项,并用 AST 与类型检查代码读取 Lhs、Rhs,区分 init 函数、跨包顺序和隐藏依赖。374 收藏 -
Go 泛型类型推断不会单独替你选择更窄的类型范围:实参或上下文先给出候选类型,约束再检查它是否允许。本文比较 any、方法约束和类型集合约束,并说明推断失败时的显式写法。102 收藏 -
Go 泛型函数的类型推断失败,通常不是函数体问题,而是普通实参、赋值上下文或类型约束没有共同解。本文用最小示例拆解常见报错,并给出显式实例化和边界检查方法。114 收藏 -
Go 类型推断会从泛型函数的普通实参、赋值上下文和类型约束中补全类型参数。本文用命名切片、无类型常量和部分显式参数说明推断路径,并整理泛型类型不能省略参数的边界。364 收藏 -
Go 没有直接限制 embedding 层级的语法。想控制外层 API,应把匿名嵌入改为命名字段并用包装方法转发;窄接口只能限制调用方的静态视图,遮蔽也不会删除底层成员。124 收藏 -
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 收藏