Go语言技术文章
-
Go 的 encoding/csv 可以把引号字段里的换行当作字段内容,而不是新记录。本文用 Reader.Read、FieldsPerRecord 和 ParseError 处理多行字段,并区分 EOF、字段数不一致与引号语法错误。203 收藏 -
Golang · Go问答 | 1个月前 | go语言 · 接口设计 · Go问答 · 兼容性 · encoding/json 接口兼容 DisallowUnknownFields RawMessage Go JSON 未知字段
Go 的 JSON 接口如果既要兼容带新增字段的旧客户端,又要知道协议发生了什么变化,可以先正常解码结构体,再用 map[string]json.RawMessage 读取字段名并比较白名单,最后将未知字段作为可审计告警,而不是直接拒绝请求。482 收藏 -
通过业务层、bufio.Writer 缓冲层和底层 io.Writer 的分层记录,区分 Go 写入阶段错误与最终 Flush 错误,并给出第一次错误的收口方式。325 收藏 -
Go 的 encoding/json 将数字解码到 interface{} 时默认使用 float64。本文从类型断言失败和大整数精度风险出发,说明 UseNumber、json.Number 与具体结构体的选择。260 收藏 -
Go 中可以通过 Scanner.Split 注册自定义 SplitFunc,按 || 等多字节分隔符读取记录。关键是未遇到完整分隔符时等待数据、EOF 返回余量,并用 Buffer 处理记录长度上限。338 收藏 -
Go 使用 json.Decoder 时,io.EOF 通常表示输入流已经正常结束,不等于 JSON 格式错误。本文用代码区分 EOF、空输入、UnexpectedEOF 和真正语法错误。444 收藏 -
Go 中使用 bufio.Reader.Peek 查看协议头或下一行前缀而不推进读取位置,本文说明逐步探测、切片复制、长行和 ErrBufferFull 的处理边界。150 收藏 -
Go 的 type assertion 失败可能来自 nil 接口或动态类型不匹配,携带 nil 指针的接口又是另一种状态。本文用 comma-ok、nil 判断和类型 switch 说明如何安全区分并处理这三类输入。152 收藏 -
讲清 Go os.CreateTemp 的目录与 pattern 规则,演示如何按业务前缀创建临时文件,并用 Close、Remove 和 defer 覆盖异常路径清理。117 收藏 -
Go 中两个 error 的 Error 文本相同,接口值仍可能不相等。本文解释动态类型和值的比较规则,并用 sentinel、errors.Is、errors.As 给出稳定的错误判断方式。461 收藏 -
Go embed.FS 的读取路径相对当前包目录,并统一使用正斜杠。本文用直接读取与 fs.Sub 两种写法说明如何处理目录前缀、跨平台分隔符和常见路径错误。195 收藏 -
Go 中把 nil 指针放进接口后,接口本身可能不等于 nil,但方法仍可依据动态类型完成分派。本文用最小示例拆开 nil 接口、typed nil 和 nil 接收者的区别。399 收藏 -
讲清 Go fs.WalkDir 遇到权限错误时的回调语义,用 errors.Is 判断权限并返回 fs.SkipDir,保留其他目录继续遍历。253 收藏 -
Go build 报头文件找不到时,不要先盲目改路径。按 CGO_ENABLED、CC/CXX、头文件搜索路径和 pkg-config 四层检查,通常可以快速定位 cgo 构建边界。393 收藏 -
Go io.Pipe 适合把边生成的数据直接接到 HTTP 上传请求。本文用 multipart 示例说明读写两端、Close 与 CloseWithError、请求取消和 goroutine 收尾,并列出 Content-Length、重试与可重复读取的边界。378 收藏