Go语言技术文章
-
前言: 最近在探索用Go来读取文件,读取文本时发现,对于单行超长的文本,我的Go代码无法处理。经过查阅才发现,Go提供的Scanner无法读取单行超长文本文件。我这里就来总结一下问题的发现497 收藏 -
概述 模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤 确定了步骤的执行顺序,单某些497 收藏 -
使用 Go slices.SortStableFunc 按结构体字段排序,掌握等值元素保序、多字段比较、降序规则与原地修改边界。496 收藏 -
Go 类型别名只是原类型的另一个名字,定义类型则创建独立类型;本文用类型身份、接收者和接口断言解释两者的方法集差异。496 收藏 -
迁移 Go 构建约束时,//go:build 与 // +build 必须表达同一条件;理解空格、逗号和多行的逻辑,再用 gofmt、go vet 和跨平台构建检查结果。496 收藏 -
同一个 Go http.Client 可以通过请求级 Context 为健康检查、普通查询和慢速报表设置不同超时。本文从一个请求巡检器出发,说明 Client.Timeout、context.WithTimeout、响应体关闭和连接复用的关系。496 收藏 -
Go test 输出 cached 并不等于测试失效,而是成功的包测试结果被复用。本文说明如何用 -count=1 强制重跑、用 -run 和 -v 定位目标,以及何时使用 go clean -testcache。496 收藏 -
Go 的 http.Client.Do 返回 404 时 err 仍可能是 nil,因为非 2xx 状态属于服务器响应,不是传输错误。本文区分 err、StatusCode 和响应体读取错误,给出关闭 Body、限制错误正文并映射业务错误的写法。496 收藏 -
遇到 concurrent map writes 不要只给 map 加锁了事。本文从最小复现开始,用 -race 报告定位共享访问,再按互斥、单所有者和 sync.Map 的边界完成修复。496 收藏 -
Golang · Go问答 | 1个月前 | golang · HTTP · Context · net/http · Go问答 · Http请求 net/http context header Go问答 Request.Clone
net/http.Request.Clone 会复制请求的大部分结构和 Header,但不会复制 Body 的底层读取位置。本文用重试与多下游请求场景拆开 Body、Header、URL 和 Context 的独立性边界。496 收藏 -
Go 程序明明调用了 Write,退出后日志文件却少了最后几行,常见原因不是字符串没生成,而是 bufio.Writer 仍留在用户态缓冲区,或 Flush、Close 的错误没有被检查。本文用一个退出前丢日志的场景,拆开缓冲写入、defer 执行时机、Flush 与 Sync 的边界,并给出可复测的收尾写法。496 收藏 -
从 fatal error: concurrent map read and map write 的现场出发,演示如何用竞态检测确认问题,再比较读写锁、单 goroutine 所有权和分片 map 的适用边界。496 收藏 -
全局队列(sched.runq)不参与work-stealing负载均衡,仅作为防饿死的被动兜底通道;它加锁、单次取1个G、每61次调度tick才检查一次,设计上排除在窃取路径外。496 收藏 -
阻塞式channel操作默认会挂起发送或接收方直到对方就位,如无缓冲channel在有接收者时才继续发送。496 收藏 -
通过减小锁粒度、使用读写锁、缩短持锁时间、原子操作和无锁结构,可有效降低Golang中sync.Mutex的争用。具体包括:将大锁拆分为多个小锁(如分片缓存),使不同goroutine访问不同锁;在读多写少场景下用sync.RWMutex提升并发性能;避免在临界区内执行耗时操作,尽早释放锁;对简单计数等操作改用sync/atomic实现无锁同步;必要时通过channel控制并发或使用sync.Pool减少分配。核心是根据访问模式选择合适机制,避免过度依赖互斥锁,从而提升高并发下的程序吞吐量。496 收藏