Go语言技术文章
-
Golang · Go教程 | 1星期前 | HTTP · 重定向 · Cookie · Go教程 · net/http · Cookie会话 Go CookieJar net/http/cookiejar Go重定向 http.Client.Jar
Go 的重定向请求想继续使用会话 Cookie,关键不是手工复制 Cookie,而是让同一个 http.Client 挂载 cookiejar.Jar。本文从两跳小项目出发,说明 Set-Cookie 如何进入 Jar、后续请求如何匹配,并梳理 Domain、Path、Secure、CheckRedirect 和客户端复用边界。424 收藏 -
Go mime.FormatMediaType 可以把媒体类型和参数 map 序列化为规范字符串,自动处理名称小写、参数排序、引号转义和非 ASCII 参数编码。本文给出最小写法,并说明非法输入返回空字符串的边界。184 收藏 -
Go 的 mime.ParseMediaType 能按 MIME 规则解析 Content-Type 参数。本文说明带引号、分号和转义值如何还原,参数名为何使用小写读取,以及语法错误和业务类型不匹配时怎样处理。186 收藏 -
Go 基准测试的计时控制实际位于 testing.B。本文用 B.Loop、StopTimer、StartTimer 和 ResetTimer 排除输入准备成本,并说明并行基准的限制。372 收藏 -
sync.OnceValue 会把初始化函数的返回值复用给后续调用,因此承载在返回值里的 error 也可能被持续复用。本文区分错误返回与 panic,给出显式重建 getter 和自定义可重试状态两种恢复策略,并说明并发交换与失败风暴边界。500 收藏 -
sync.RWMutex 不支持把 RLock 升级为 Lock,读锁未释放时申请写锁会等待自己释放读锁而形成阻塞。本文用原创代码对比拆分读写临界区与直接使用单写锁的改造方案,并说明重新检查、锁复制和对象生命周期边界。395 收藏 -
用 io.NewSectionReader 限定大文件分片范围,再通过 io.TeeReader 同时写入输出流并计算 SHA-256。本文给出边界检查、短读处理和多分片拆分的完整写法。369 收藏 -
用一个实现 io.Reader 的限速包装器接入 io.Copy,让文件或请求体的复制链路按字节速率发送,文章同时说明读取粒度、突发流量、错误处理和并发复用边界。200 收藏 -
结构体里放入 sync.Mutex 后,按值传参、赋值或返回都会复制锁的内部状态,可能造成异常解锁、数据竞争和锁失去保护对象。本文从根因、错误写法、指针改造和 go vet copylocks 检查四个方面说明安全设计方式。448 收藏 -
用 Go 的 io.LimitedReader 控制流式读取上限,说明 N、n、EOF 与底层输入的关系,并给出读取固定片段和继续处理剩余数据的实用写法。307 收藏 -
使用 sync.WaitGroup 收尾并发任务时,关键不是把 Wait 放在最后,而是保证任务计数先建立、空 WaitGroup 上的 Go 先于 Wait,并在复用前等上一轮 Wait 返回。本文对比 WaitGroup.Go 与 Add/Done 的调用顺序,给出一份可直接落地的并发收尾写法。455 收藏 -
Golang · Go教程 | 1星期前 | HTTP · go · Cookie · 跨域 · cors · cookie Go cors net/http SameSite 跨站请求 http.Cookie
Go 的 net/http 可以通过 Cookie.SameSite 表达 Strict、Lax 和 None 三种跨站发送策略,但浏览器是否真正带上 Cookie 还取决于 Secure、fetch credentials 和 CORS。本文从一个跨站会话场景拆开这些配置的职责边界。399 收藏 -
sync.Pool 取出的对象带着上一次请求的字段时,问题通常不是 Pool 失效,而是复用对象没有在交接边界清理。本文从临时对象契约、Reset 设计、Get/Put 时机和不适合放入 Pool 的状态四个方面,整理一套可落地的排查方式。278 收藏 -
Golang · Go教程 | 1星期前 | 缓存 · HTTP · go · Go net/http 静态文件 Cache-Control ETag If-Modified-Since ServeFile
用 net/http ServeFile 提供静态文件时,Last-Modified 和 If-Modified-Since 可以由文件修改时间驱动条件响应;ETag 与 Cache-Control 则需要业务方明确设置。本文从一个文件处理器拆开这些响应头的职责边界,并说明路径拼接、304 和缓存失效的常见陷阱。136 收藏 -
sync.Cond 出现等待不返回时,先检查共享条件是否由同一把锁保护,再确认 Wait 是否位于 for 循环中。本文用原创 Go 示例拆开 Signal、Broadcast、条件状态与 channel 的适用边界,帮助定位所谓的唤醒丢失。112 收藏