Go语言技术文章
-
解释 Go http.Cookie 同时设置 MaxAge 与 Expires 时的序列化结果、浏览器优先级,以及持久化、会话和删除 Cookie 的配置排查方法。401 收藏 -
Go vet 提示复制锁时,通常应把包含 sync.Mutex 的方法从值接收者改成指针接收者,而不是把锁改成指针字段。本文说明值接收者的隐式复制、接口方法集和无锁快照的正确边界。144 收藏 -
Go 读取同名 Cookie 时,Cookie 方法只返回一个值;本文用 CookiesNamed 和 ParseCookie 保留头部顺序,并说明服务端无法从请求头反推出 Path、Domain、SameSite 与过期时间。465 收藏 -
Go 结构体一旦包含 sync.Mutex,就不能把它当普通值随意复制。本文用共享 map 的例子说明值接收者和 b := a 为什么会让两份锁保护同一份数据,并给出指针接收者、显式 Clone 与 go vet 检查方法。273 收藏 -
用 Go 的 http.Cookie 设置 SameSite、Secure、HttpOnly 和过期时间,解释三种 SameSite 模式、MaxAge 正负值以及从 Set-Cookie 响应头排查属性不生效的方法。430 收藏 -
Go select 不会按 case 的源码顺序固定选择;多个通信同时可运行时会在可运行集合中做均匀伪随机选择。本文用两阶段探测、退避和指标记录,避免把随机选择误判成业务优先级。120 收藏 -
net/http.ServeMux 注册 /orders/ 子树后,访问 /orders 可能先发生尾斜杠重定向。本文用 Go 1.22+ 方法模式和 {$} 精确匹配说明如何固定 POST 规范地址、兼容两种路径,并排查 301、302、307、308 对请求体的影响。290 收藏 -
Go 的 select default 只说明本次 channel 未就绪,不等于任务失败。本文用 pending 状态、指数退避、随机抖动和 context 取消,说明非阻塞收发如何降频重试并避免丢任务。438 收藏 -
Go 1.22 之后,ServeMux 不按注册先后决定路由,而是比较方法、主机和路径对应的请求集合。本文用字面量、单段通配符、尾部通配符和方法模式说明什么叫更具体,为什么有些模式会在注册时直接冲突。233 收藏 -
Go select 发送到满 channel 时,default 只能让本次发送立即返回,不能代替重试和关闭协议。本文用有界事件队列说明如何选择立即丢弃、有限退避或带超时阻塞,并给出指标与验收清单。384 收藏 -
Go 1.22 的 net/http.ServeMux 支持把 HTTP 方法和通配符直接写进路由模式。本文用小例子说明 PathValue、最具体匹配、冲突 panic 和 405 的判断方法。332 收藏 -
Go 向已关闭 channel 发送会触发运行时 panic。关键不是发送前猜测 channel 状态,而是把关闭权交给能确认所有发送方已退出的唯一协调者;接收方提前结束时用 done channel 或 context 通知发送方停止。451 收藏 -
io/fs 使用统一的斜杠逻辑路径,操作系统文件 API 却需要本地路径。本文用 fs.ValidPath、filepath.Localize 和 filepath.Join 说明如何安全转换,并解释 Clean、FromSlash、ToSlash 的边界。107 收藏 -
多个生产者共享 Go channel 时,应由唯一协调者等待全部生产者退出后关闭;接收端用 ok 区分关闭信号与有效零值,避免发送 panic。324 收藏 -
filepath.Clean 只做词法清洗,不能单独保护固定根目录。本文用 Go 标准库示例说明如何组合 filepath.IsLocal、fs.ValidPath、filepath.Localize 和 filepath.Join,处理用户路径与跨平台文件名。123 收藏