-
Go的GC是三色标记-清除并发垃圾回收器,非分代、不依赖引用计数,基于可达性分析,仅管理堆上对象,STW时间约100μs。390 收藏 -
本文介绍如何在Go开发中实现类似其他语言的“运行时表达式求值”能力,重点推荐基于调试器(如godebug)的交互式调试方案,避免频繁使用print调试或手动搭建测试环境。390 收藏 -
本文介绍如何将Go语言中的树遍历函数Walk转译为Erlang,重点对比并发(spawn)与同步(递归)两种实现方式,并指出其行为差异、适用场景及潜在问题。389 收藏 -
使用goget安装第三方库,先通过gomodinit初始化模块,再执行gogetgithub.com/gorilla/mux安装指定库,GoModules会自动下载并记录依赖,支持@版本号指定特定版本,最后在代码中import使用,推荐配置GOPROXY代理解决下载失败问题。389 收藏 -
用gRPC替代HTTP/1.1JSONAPI是最直接的降延迟手段,因其基于HTTP/2和ProtocolBuffers,具备二进制序列化快、多路复用、头部压缩等优势,实测可降低RTT2–5ms。389 收藏 -
必须用*T而非T的情况是:需在函数内修改指针变量本身的指向,如realloc、Cgo输出参数或交换指针值;日常Go代码应优先用返回值替代,仅Cgo等底层交互不可替代。389 收藏 -
Go语言时间控制核心是time包,需用time.Now().Format()按参考时间“2006-01-0215:04:05”格式化,用time.Sleep(d)暂停协程并带单位,测试时应抽象nowFunc以便替换。389 收藏 -
Go反射无法序列化私有字段,因未导出字段调用Interface()会panic;json.Marshal通过IsExported()跳过私有字段,不依赖反射读取其值,仅用tag控制键名;强制反射访问私有字段需unsafe,不推荐。389 收藏 -
应通过依赖注入NowFunc替代直接调用time.Now(),避免全局变量或init()中固化时间;测试时传固定闭包,生产用time.Now;慎用第三方clock包,优先函数参数注入。389 收藏 -
Go中超时控制唯一可靠入口是context.WithTimeout或context.WithDeadline,必须透传至HTTP/gRPC/DB等底层调用,禁用手动计时器或内部新建context。389 收藏 -
b.ReportAllocs()不显示内存统计是因为基准测试未触发堆分配,如仅操作栈变量、复用切片或使用sync.Pool;需在b.Run或b.ResetTimer后、循环前调用才生效。389 收藏 -
Go中结构体赋值是值拷贝,修改副本不影响原变量;需用指针赋值(&u1)或指针接收者方法才能修改原结构体,含sync.Mutex等不可复制字段时必须用指针。389 收藏 -
Go基准测试必须用gotest-bench启动,手动运行无效;函数需为funcBenchmarkXxx(*testing.B)格式;b.ResetTimer()应在初始化后、循环前调用,避免准备时间计入耗时。389 收藏 -
本文详解如何在httprouter+Negroni组合中实现路由级中间件隔离——例如仅对/v1/users/login应用Middleware2,其余路由统一使用Middleware1,避免全局污染或重复嵌套。389 收藏 -
Go模糊测试语料库是存放于fuzz/corpus/下的无扩展名纯文本文件,内容为能被Fuzz函数直接解析的原始字节,需避免BOM、隐藏文件、子目录及错误换行符,且首次运行时会SHA256去重并预加载。389 收藏