-
必须同时用reflect.TypeOf和reflect.ValueOf——前者获取字段名、类型、标签,后者获取实际值;只用其一会panic或返回空。
-
Go游戏服务器需用net/tcp+goroutine管理万级连接,设读写超时、bufio处理粘包与缓冲写、sync.Once防重复清理、消息推chan由独立goroutine消费;WebSocket须设SetPongHandler并主动ping;玩家状态用map+RWMutex分桶更优;协议解析须限制单次读取长度。
-
gvm是类Unix系统下最稳妥的Go多版本管理工具,能隔离版本、避免PATH污染;安装后需重载shell配置(如source~/.profile)否则go命令不可用。
-
Go测试函数必须以Test开头、接收*testing.T参数、命名符合TestXxx规则且文件名为xxx_test.go;t.Error记录错误后继续执行,t.Fatal则立即终止当前测试函数。
-
jwt.Parse后必须手动检查token.Valid,因其仅解析结构和解密签名,过期、篡改等校验依赖token.Valid;应使用ParseWithClaims配合嵌入jwt.RegisteredClaims的结构体,并确保密钥≥32字节且不硬编码。
-
GoHTTP中间件是手动嵌套的函数链,每层必须接收并调用next.ServeHTTP(),顺序决定执行时序,ResponseWriter包装需完整实现接口,条件跳过或数据透传需谨慎使用context。
-
Go中无法让自定义类型(如嵌入time.Time的结构体)在运行时类型断言中被识别为time.Time,但可通过接口抽象实现行为兼容——推荐用TimeLike等自定义接口替代硬编码类型检查。
-
游戏服务器核心通信层必须用net包直连TCPConn,因net/http带HTTP头、状态码等冗余开销,无法满足实时对战帧同步需求,且不支持心跳、断线检测、粘包处理。
-
Go标准库不支持sendfile/splice零拷贝,需手动调用syscall.Sendfile并严格管理fd生命周期,仅Linux可用,且需处理offset循环、平台约束与内核限制。
-
GoWeb开发中跨域请求需后端显式配置CORS响应头或使用gorilla/handlers中间件;必须正确处理OPTIONS预检请求,并注意Allow-Origin与Allow-Credentials的兼容性及Vary:Origin头的设置。
-
Delve默认会将被调试Go程序的stdout和stderr直接输出到调试器控制台,无需额外配置即可实时查看。
-
泛型在编译期实现类型安全的通用代码,反射在运行时动态操作类型,二者协同可兼顾安全与灵活性。例如,泛型函数可接收任意类型,内部通过反射分析具体类型的结构,但反射无法获取类型参数约束或泛型定义本身。
-
因为net/rpc缺乏跨语言支持、服务发现、健壮超时与上下文取消、错误分类及panic恢复等生产必需能力,仅适用于学习或轻量内部通信。
-
Go中recover无法捕获context.Cancel的panic,因后者不触发panic而仅使ctx.Err()返回context.Canceled;需在阻塞点显式检查ctx.Err()并主动退出。
-
匿名结构体是Go语言中没有名字的结构体类型,主要用于临时性、局部性的数据聚合场景。其核心特点是即用即抛,适用于仅在特定上下文使用的数据结构,避免定义冗余的具名类型。例如:1.作为函数参数或返回值封装临时配置;2.直接用于JSON序列化/反序列化提升灵活性;3.在循环或局部作用域内聚合处理结果;4.结合接口字段实现临时行为适配。使用匿名结构体的优势在于代码简洁、结构直观、减少类型定义负担,尤其适合API响应构建和中间数据转换。然而,它也存在局限:无法定义方法或实现接口、可读性较差、测试不便以及未来重构成本较