-
Go标准库的encoding/xml和encoding/json不支持访问者模式,需用xml.Decoder.Token()流式解析XML或json.RawMessage延迟解析JSON,或选用gjson/xmlquery等第三方库实现类似功能。
-
unsafe.Pointer转*T时必须确保类型对齐和内存有效Go的unsafe.Pointer本身不携带类型信息,转成具体指针(如*int64)后,运行时不会校验目标地址是否真能存下该类型。一旦越界、未对齐或指向已释放内存,程序可能直接崩溃或读到垃圾值。常见错误现象:panic:runtimeerror:invalidmemoryaddressornilpointerdereference或静默返回错误数值使用场景:只应在明确知道底层内存布局时用,比如解析二进制
-
Go中使用指针可避免数组拷贝并直接修改原数据,因数组是值类型,传参时需传递指针(如[3]int)以实现外部修改,通过&取地址、解引用操作元素,函数中常见此用法;而切片为引用类型,无需显式取指针即可修改底层数组。
-
http.FileServer直接挂载根路径会404,因其严格匹配请求路径前缀且不自动补全斜杠;正确方式是用http.StripPrefix("/static/",fs)映射子路径,并注意尾部斜杠、绝对路径和缓存控制。
-
Go 用 httptest 写 Handler 单测时,常见现象是状态码为 0、响应头没生效,或读到的响应体为空。关键是区分 ResponseRecorder 的记录时机、WriteHeader 的提交边界,以及 Result 必须在 Handler 返回后再读取。文中给出可复用的最小测试和复查清单。
-
Go1.21+可直接使用内置min()函数比较两个time.Duration值;旧版本需手动实现,本文详解两种方案及最佳实践。
-
Go用户注册登录需验证输入、bcrypt加密密码、参数化存储、JWT或Redis会话;校验邮箱、密码强度、用户名;禁用明文存储和SQL拼接;设HttpOnly/SecureCookie。
-
Go中可通过reflect.Value的Call方法动态调用函数或方法,适用于插件机制等场景;需确保函数可导出,使用reflect.ValueOf获取函数值,构造[]reflect.Value类型的参数并调用Call,返回值为[]reflect.Value类型,需注意参数类型匹配和接收者可寻址性,且应避免频繁使用以减少性能损耗。
-
ethclient.Dial返回nilclient且err为nil通常因传入空字符串、无效HTTP地址或本地节点未启用CORS/RPC;应使用DialContext配合超时,验证节点响应,正确配置证书与项目ID。
-
明确模块边界需为每个组件设独立go.mod文件,统一主干版本管理,用replace/exclude控制依赖,自动化检测孤儿模块、版本一致性、循环引用及API兼容性。
-
使用指针返回可避免大结构体拷贝、提升性能,并支持修改原始数据。通过逃逸分析,Go能安全返回局部变量地址;基本类型指针需谨慎使用,常用于标记“空值”;当接口方法为指针接收者时,必须返回指针以满足接口实现。
-
Go 服务把 regexp.Compile 放进请求函数后,正则本身没变,延迟却会随并发上升。本文用基准对比请求内编译、包级预编译和受控缓存,解释编译成本、并发读写与动态规则的边界。
-
GmailAPI对邮件正文采用Base64URL安全编码(base64url),而非标准Base64;若误用base64.StdEncoding.DecodeString,将导致解码失败、截断或乱码(如仅输出"<ht"),本文详解Go中的完整解码流程与避坑要点。
-
围绕 Go 1.25 testing 新增的 Attr 和 Output 能力,讲清测试元数据、go test -json、CI 报告聚合、失败上下文和团队测试日志规范。
-
Go 扫描上传目录或日志目录时,os.ReadDir、File.Readdir 和 filepath.WalkDir 的内存与排序行为并不一样。本文用一个目录索引小实验说明如何按需读取 DirEntry、避免无意排序,并在权限错误和部分结果场景下保留可用数据。