Go语言技术文章
-
1. 前言 Golang context是Golang应用开发常用的并发控制技术,它与WaitGroup最大的不同点是context对于派生goroutine有更强的控制力,它可以控制多级的goroutine。 context翻译成中文是"上下文",即它可以控470 收藏 -
区块链开发用什么语言?通过本文你将使用Go语言开发自己的区块链(或者说用go语言搭建区块链)、理解哈希函数是如何保持区块链的完整性、掌握如何用Go语言编程创造并添加新的块、实现多个470 收藏 -
简介 上一篇文章《Go 每日一库之 securecookie》中,我们介绍了 cookie。同时提到 cookie 有两个缺点,一是数据不宜过大,二是安全问题。session 是服务器端的存储方案,可以存储大量的数据,而且470 收藏 -
Go 1.23 为 reflect.Value 增加了 Seq2,可把 map 统一为 key/value 序列,也能遍历数组、切片、字符串和双值迭代函数。本文从一次遗漏 map 值的故障出发,说明 CanSeq2 判断、各类型双值语义和提前停止边界。469 收藏 -
讲清 Go time.Timer 复用时 Stop 返回值、旧语义排空 C 通道和 Go 1.23 新计时器语义的差异,并给出单一所有者的安全模板。469 收藏 -
Go 项目可以用 go build 的 -ldflags=-X 在构建时写入版本号和提交号,再配合 -trimpath 减少本机路径差异。本文给出变量定义、脚本参数、可复现边界和发布前检查方法。469 收藏 -
Go 1.27 扩展了泛型函数的类型推断场景。本文用函数类型赋值、类型转换和 channel send 三个边界,说明何时可以省略类型参数,以及旧代码迁移时如何核对。469 收藏 -
用 Go 标准库 http.ServeContent 做一个可断点续传的文件接口,串起 Range、206 Partial Content、Last-Modified 和 If-Modified-Since,并补上路径、时间和回归检查。469 收藏 -
不用map而用布隆过滤器是因为内存更省:上亿字符串查重时,map需几百MB,布隆过滤器仅几MB,代价是允许极小误判但绝不漏判,适合前置过滤如消息去重、URL去重等。469 收藏 -
跨服WebSocket单发与群发需依赖RedisPub/Sub实现消息中继,因gorilla/websocket仅支持本地连接操作,各节点须独立维护clientsmap并订阅统一频道,通过user_id定位目标实例后定向推送或按房间分组广播。469 收藏 -
延迟任务桶需在±50ms误差内将内存压至100MB以内,采用分层时间轮(三级:10ms/256槽、256ms/256槽、65.5s/256槽)、原子状态机防重复执行、sync.Map去重、LRU驱逐与堆管理限流,杜绝逃逸与内存泄漏。469 收藏 -
Go语言中基准测试通过testing.B可精准测函数性能,需以Benchmark开头、用b.N循环、防编译优化,运行gotest-bench=.查看ns/op等指标,配合-benchmem分析内存分配。469 收藏 -
不能直接用time.Now().UnixNano()生成分布式ID,因其纳秒级时间在高并发下仍会重复,且无机器/进程标识导致跨节点不唯一;加锁串行化则引发性能瓶颈。469 收藏 -
Go中需手写归并排序,因标准库未提供;应采用迭代式bottom-up实现,复用单个辅助切片,避免递归爆栈和频繁内存分配。469 收藏 -
不能安全跨包访问未导出变量或函数——go:linkname绕过可见性检查,但未导出符号不进导出表,易链接失败或运行时panic;仅支持标准包文档化符号或显式导出的小写符号。469 收藏