Go语言技术文章
-
Golang · Go教程 | 1星期前 | 标准库 · HTTP服务 · Go教程 · Go net/http X-Forwarded-For http.Request RemoteAddr Forwarded 客户端地址
Go 的 http.Request.RemoteAddr 只能表示当前 Go 服务看到的 TCP 对端;部署在反向代理后时,客户端地址通常来自代理转发头,但必须先确认代理可信。本文给出可复用的解析函数、IPv6 处理和日志边界。393 收藏 -
HostLayout 约束的是 Go 结构体在当前主机上的内存布局,不是跨平台、跨进程或长期存储的字节协议。本文从一个布局误用场景拆解原因,并用 encoding/binary 演示如何显式指定字段宽度与字节序。393 收藏 -
用 Go 的 go/parser.ParseFile 解析单文件源码,保留注释并从 ast.File 读取包名、声明和文档字段,同时说明 FileSet、语法错误与完整包分析的边界。393 收藏 -
Go 1.20 起可以用 FileSet.RemoveFile 移除不再使用的文件,降低长驻源码分析工具持续积累的文件位置表内存。本文说明位置引用、AST、诊断文本与 FileSet.Base 的迁移边界。393 收藏 -
sync.Map.Range 能遍历当前可见的键值,但它不提供一致性快照。本文用并发缓存盘点示例说明 Store、Delete 与 Range 的可见性边界,并给出锁、版本号和独立快照三种更可靠的判断方式。392 收藏 -
Go bufio.Scanner 默认按行返回文本,空行会返回空字符串。本文用一个可复用的段落聚合流程处理普通行、连续空行、EOF 和读取错误,并说明严格空行与空白行的区别。392 收藏 -
Golang · Go问答 | 3星期前 | CGO · 内存管理 · Go问答 · 排错 · Go Go指针 CGO runtime/cgo.Handle C指针 runtime.Pinner cgocheck
Go cgo 指针检查的关键不是把 unsafe.Pointer 换成别的类型,而是确认内存归属、内部是否含 Go 指针以及 C 保存地址的时长。本文对比临时借用、C 内存复制、runtime/cgo.Handle 和 runtime.Pinner 的适用边界。392 收藏 -
Go 1.27 扩展了泛型函数的上下文推导:当赋值目标是明确的非泛型函数类型时,可以从目标签名推导类型参数。本文用函数赋值、切片字面量、类型转换和通道发送说明可推导边界。392 收藏 -
Go bytes.Runes 会把 UTF-8 字节切片解释为 Unicode 符文并返回 []rune。本文从基础转换、长度单位、非法 UTF-8 和字符边界几个方面说明如何安全使用。392 收藏 -
Go 1.22 改变了 for 循环变量的创建方式,但循环外变量、旧模块和延迟回调仍可能共享同一个值。本文说明闭包捕获边界,并给出显式传值和当前值副本的稳妥写法。392 收藏 -
time.Duration 以 int64 纳秒保存,和整数相乘时不会自动报告溢出。本文从边界值、四种符号组合和 MinInt64 特例出发,给出乘法前检查并返回 overflow 标记的安全写法。392 收藏 -
Go 反向代理中,URL.Host 决定连接哪个上游,Request.Host 决定发送哪个 Host 头。本文说明服务端读取、客户端转发、端口和安全校验的边界。392 收藏 -
Go ascii85.Decode 需要同时看 ndst、nsrc、flush 和 err。本文说明分块读取时如何保留未完成尾块,并在流结束时区分正常短块、单字符截断和非法 ASCII85 字符。392 收藏 -
用 Go mime/multipart.Reader.NextPart 逐段读取 multipart 表单,通过 FormName 和 FileName 区分普通字段与文件字段,并正确处理 io.EOF、读取边界和常见误区。392 收藏 -
Go sync.Cond 的 Signal 不会替等待者保存一条通知。要避免看似错过唤醒,必须用同一把锁保护共享条件和 Wait,并在 for 循环中重新检查条件;再根据唤醒一个还是全部等待者选择 Signal 或 Broadcast。391 收藏