-
Go语言浮点数精度问题源于IEEE754标准下二进制无法精确表示十进制小数,如0.1和0.2相加得0.30000000000000004;该问题普遍存在于现代编程语言中;关键应对策略包括:金融等精确计算场景禁用float32/float64,改用github.com/shopspring/decimal库(建议从字符串初始化)或转换为整数运算(如元转分);比较浮点数时应使用容差范围而非==,舍入操作应在decimal或整数基础上进行;注意常量折叠优化导致字面量与变量计算结果差异,避免依赖浮点数精确值。
-
GoHTTP服务需手动设置CSP头,注意单引号包裹值、分号分隔、禁用unsafe-inline/eval;动态nonce须每次请求生成并同步模板与响应头;第三方库如unrolled/secure仅支持静态策略;调试应检查响应头是否存在及语法正确性。
-
Go使用IEEE-754双精度浮点数表示小数,导致部分十进制数(如1.021)无法精确存储,乘法后取整可能产生意外截断(如1020而非1021)。
-
模块缓存默认开启,自动存储解压校验后的模块副本于GOMODCACHE(默认$GOPATH/pkg/mod),gobuild等命令自动复用;需避免CI中误清缓存或错误配置路径。
-
Go中没有全局对象,只有包级变量,须在函数外用var声明,首字母决定导出性;多文件初始化顺序不可控,应避免跨文件依赖;并发读写需同步;推荐用sync.Once单例替代init()硬初始化。
-
goroutine泄漏是并发性能下降的头号原因,表现为Mallocs持续上涨、Goroutines数卡在高位;常见于time.After轮询未改用Timer.Reset,以及channel读写不配对导致阻塞。
-
Go的map无法构建DHT,因其仅为本地键值容器,缺乏XOR距离计算、K-bucket动态管理、UDP消息路由等核心能力;DHT要求自治、去中心、基于20字节ID的逻辑距离收敛,而map仅支持O(N)查找且无网络交互能力。
-
Go通过首字母大小写控制可见性:大写为导出(public),小写为非导出(private);结合internal目录限制包访问,实现模块私有管理。
-
Go中var声明不能省略类型又不赋值,因是静态类型语言需编译器明确类型;:=仅限函数内使用,不可用于包级、重复声明、不可寻址左值等场景。
-
断点续传需手动设置Range头并校验服务端支持:先HEAD检查Accept-Ranges,再用http.Client发起bytes=start-请求;本地文件需Seek定位写入,配合Truncate容错;遇416或中断时比对ETag/Content-Length决定全量重下或指数退避重试。
-
配置GOPROXY、GOCACHE和GOMODCACHE以加速依赖下载与编译复用,使用air等热重载工具实现增量构建,禁用CGO减少开销,通过gotest并行测试与合理目录划分提升测试效率,并利用-gobuild-x、-cpuprofile及pprof分析性能瓶颈,保持环境整洁可显著提升Go本地开发效率。
-
Pod是Kubernetes调度和管理的最小单位,本质为共享网络、存储且共进退的容器协作单元;底层由pause容器占住网络命名空间并作为根进程维持Pod生命周期;调度经过滤与打分两阶段;状态需结合describe和logs深入排查。
-
net/http.Hijacker是Go标准库中用于劫持HTTP连接的接口,必须在需绕过HTTP协议栈直接操作底层TCP连接时使用,如WebSocket升级、HTTPS代理隧道、自定义二进制协议等;调用前响应未写出,且HTTP/2环境下不可用。
-
微服务异步调用应优先选用消息队列而非goroutine+HTTP/gRPC。因后者无重试、无持久化、不保证幂等与顺序,仅适用于日志上报等非关键场景;RabbitMQ需配合可靠出箱表与结构化事件,NATSJetStream消费端须实现幂等、重试与可观测性。
-
AWSSDKforGov2是官方推荐版本,需正确配置凭据、context、ContentLength和endpoint;小文件用s3.PutObject,大文件必须用s3manager.Uploader;兼容OSS/COS/MinIO时注意endpoint协议、region及TLS设置。