-
Go项目启用gobuild-mod=vendor时,必须将vendor目录提交至git,否则CI构建必然失败;该模式强制只读vendor/、绕过网络和go.mod,若vendor缺失或modules.txt过期,会报“inconsistentvendoring”错误。
-
HTTP缓存头关键字段为Cache-Control、ETag、Last-Modified,其中Cache-Control优先级最高并覆盖Expires,ETag与Last-Modified共存时客户端优先使用ETag校验,ETag值必须用英文双引号包裹。
-
回退Go模块版本最安全的方式是使用goget命令指定旧版本,如gogetmodule/path@v1.2.3,可自动更新go.mod和go.sum;若需回退到特定commit,可用gogetmodule@commit-hash生成伪版本;当依赖混乱时,可执行goclean-modcache清理缓存后重新下载;虽可手动修改go.mod文件并运行gomodtidy,但推荐优先使用goget方式处理版本回退。
-
Go bytes.Buffer 的 Available 能告诉你当前还能直接写入多少字节,但它不是总容量,也不能替代 Grow 的容量规划。本文用批量拼接 HTTP 响应的场景,说明 Available、AvailableBuffer、Append、Grow 与 ErrTooLarge 的边界,并给出可回归的检查方法。
-
Go 读取同名 Cookie 时,Cookie 方法只返回一个值;本文用 CookiesNamed 和 ParseCookie 保留头部顺序,并说明服务端无法从请求头反推出 Path、Domain、SameSite 与过期时间。
-
Go bytes.Reader 同时支持顺序读取、绝对偏移读取和定位。本文区分 Len、Size、ReadAt、Seek 的职责,并用 io.SectionReader 固定下游可见的缓冲区间。
-
Go database/sql 复用 sql.Stmt 时,先按 DB、Conn、Tx 区分所有权,再把创建与关闭绑定到同一生命周期;文章给出初始化复用、Rows清理、事务执行和停机收尾的实用写法。
-
Go context.AfterFunc 会在取消后异步执行回调。本文用 stop 返回值、sync.Once 和 done channel 说明如何收敛外部资源的释放所有权,避免取消竞态下重复关闭或提前返回。
-
slog.HandlerOptions 的 AddSource 能把调用文件和行号加入日志,配合 LevelError 可构造只输出错误的 Handler。本文给出路径精简、包装函数修正、结构测试和性能取舍的完整流程。
-
用 Go 标准库 net/mail.ParseAddressList 解析多个收件人,分别读取 Name 与 Address,并用数量、字段和错误三个指标判断地址列表是否可继续进入业务流程。
-
Go 里可以通过 pprof.Lookup("goroutine") 获取运行时内置的 goroutine profile,再用 WriteTo 将它写入 bytes.Buffer 或文件。本文说明 debug=1 文本、debug=0 协议缓冲区和 debug=2 堆栈格式的区别,并给出错误处理与复用封装。
-
Go errors.As 可以沿着 errors.Join 形成的错误树查找目标类型,并把首个匹配值写入目标指针。本文用可执行的类型化错误示例说明组合错误的遍历顺序、未命中处理和参数边界。
-
引言
当你阅读Golang源码时一定遇到过unsafe.Pointer、uintptr、unsafe.Sizeof等,是否很疑惑它们到底在做什么?如果不了解这些底层代码在发挥什么作用,一定也无法了解上层应用构建的来由了,本篇
-
背景
题主现在是php程序员, 学了一周的golang, 深刻的感受到了其特性的优雅及功能的强大, 为了增强熟练度, 决定来写个贪吃蛇来践行下.(底部有github项目链接)
需求构思
1. 确定元素 -
-
删除切片指定元素一般有如下几种方法,本文以 []int 为例给出具体实现。
1.截取法(修改原切片)
这里利用对 slice 的截取删除指定元素。注意删除时,后面的元素会前移,所以下标 i 应该左