-
Go的GC是三色标记-清除并发垃圾回收器,非分代、不依赖引用计数,基于可达性分析,仅管理堆上对象,STW时间约100μs。
-
make([]byte,0,1024)更省内存,因len=0时GC不视底层数组为活跃引用,避免小对象高频创建/销毁导致的堆碎片;而make([]byte,1024)立即分配并零值初始化全部空间。
-
Go语言中通过context包实现并发任务取消,最常用方式是将context.Context作为参数传递给并发函数,并在任务中监听其Done通道以响应取消信号。示例中longRunningTask函数通过select监听ctx.Done(),当调用cancel()或超时触发时,任务打印取消信息并退出。可使用context.WithCancel手动取消、WithTimeout设置超时自动取消、WithDeadline设定截止时间。context支持链式传播,上游取消会通知下游所有派生context,Go1.
-
优先按值返回小结构体(≤8字节),大结构体或含不可复制字段(如sync.Mutex)时返回指针;需调用指针接收者方法或修改原值时也应返回指针。
-
Golang的container/list包提供内置双向链表,无需手动实现节点和操作。导入"container/list"后,可用list.New()创建链表,支持PushFront/PushBack添加元素,Front()+Next()遍历,Remove删除元素,Value修改值,还提供Len、MoveToFront等方法,方便高效地进行链表操作。
-
本文详解Go语言中函数调用时参数的求值时机,揭示为何fmt.Println(pow(3,2,10),pow(3,3,20))输出为"27>=20920"而非直观预期的"927>=2020",核心在于:所有函数参数在调用前被自左向右求值,且每个求值过程可能触发副作用(如打印)。
-
go-zero强制按微服务最佳实践组织代码,需用goctl依.api文件生成骨架;配置须显式加载且大小写敏感;RPC注册需确保etcd地址、服务名一致;API调用RPC须预热、复用client并设超时。
-
Golang切片是引用类型,基于底层数组的指针、长度和容量实现;创建方式包括基于数组、字面量和make函数;append操作可能触发扩容,扩容时若原容量小于1024则翻倍,否则增加1/4;扩容会分配新数组并复制数据,导致地址变化;为避免频繁扩容应预先设置足够容量;copy函数复制时以较短切片为准;nil切片可直接append;注意越界、共享底层数组及nil判断等常见问题。
-
Go语言从1.11起使用gomod管理依赖,取代GOPATH;通过gomodinit创建模块,自动生成go.mod文件;导入包时自动下载依赖,或手动用goget指定版本;常用命令包括gomodtidy清理依赖、gomoddownload下载、gomodvendor导出到vendor目录、golist检查更新;支持在go.mod中用replace替换模块路径或指定版本,实现私有模块调试与版本控制;go.sum校验完整性,确保依赖安全可靠。
-
Go中struct是唯一基础单元,字段首字母大小写决定导出性,推荐字段名赋值初始化,匿名字段实现组合式字段提升,方法接收者选值或指针取决于是否修改原值,私有字段不参与JSON序列化和ORM映射。
-
jwt-gov4+禁用none等不安全算法且Parse不校验签名,须用ParseWithClaims配合密钥回调和StandardClaims嵌入,并区分错误类型返回对应状态码。
-
本文详解如何在Go单元测试中无需修改生产代码(如硬编码URL或降级为HTTP),即可安全、可靠地模拟HTTPS服务响应,重点介绍基于httptest.NewTLSServer的正确用法及自定义RoundTripper的两种高灵活性方案。
-
Go的ParseMultipartForm必须先调用才能读取文件,因http.Request默认不自动解析multipart数据;若未调用,r.MultipartForm为nil,r.FormFile将返回错误或空文件句柄,导致静默失败。
-
包是代码逻辑分组,模块是包的集合与版本管理单元,go.mod文件定义模块元信息及依赖关系,实现可重复构建与依赖管理。
-
使用Golang实现AES-GCM加密解密文件需生成密钥和nonce,步骤如下:1.使用crypto/rand生成32字节密钥与12字节nonce;2.通过aes.NewCipher与cipher.NewGCM创建GCM实例;3.调用Seal方法加密并写入nonce与密文;4.解密时读取nonce并使用Open方法验证完整性;注意密钥不可硬编码,nonce必须唯一。