Go教程技术文章
-
分析字符串拼接和 []byte 转换成本,用 Builder、Buffer 和清晰边界减少分配。404 收藏 -
Go命令行工具不走代理的常见原因是NO_PROXY未正确配置,需全大写、逗号分隔且不含通配符;Go1.19+支持CIDR,私有HTTP仓库还需设置GOINSECURE。403 收藏 -
Golang实现加密签名验证的核心是私钥签名+公钥验签,依赖crypto/rsa或crypto/ecdsa等标准库,必须先哈希再签名,推荐ECDSA(P-256)或RSA-2048,密钥需安全存储,HTTP集成时应覆盖method/path/bodyhash/timestamp并校验时效性。403 收藏 -
Go无法真正零停机,必须通过net.Listener.File()导出fd、子进程用net.FileListener恢复、父进程Shutdown等待旧连接结束三者协同;直接ListenAndServe必因端口占用或SO_REUSEPORT调度不均导致connectionrefused或RST。403 收藏 -
Golang · Go教程 | 3星期前 | golang · Timer · 并发编程 · time.After · 性能排查 · time.After go timer Go 1.23 NewTimer Timer.Reset Timer.Stop
Go 1.23 之后,未引用的 Timer 可以被垃圾回收,time.After 不再天然等于内存泄漏。但在高频超时循环里,仍要先区分分配波动、超时语义和取消需求;需要复用或主动取消时,再用 NewTimer、Stop 和 Reset 把边界写清楚。403 收藏 -
Go1.18前用interface{}+reflect实现伪泛型,代价是性能损耗、类型不安全和调试困难;需用Kind()判类型、Set()赋值(目标须可寻址)、Get()解析tag、缓存struct信息优化性能。402 收藏 -
TestMain是Go中用于控制测试流程的函数,通过接收*testing.M参数实现测试前后的setup与teardown操作。在TestMain中调用m.Run()执行所有测试,并手动调用os.Exit(exitCode)返回结果。它适用于全局初始化、资源清理等场景,但需注意每个包仅能定义一个TestMain,且不可省略m.Run()和os.Exit()调用。402 收藏 -
Go用net包监听TCP并回显原始字节需:启动goroutine处理每个conn,循环Read()直至io.EOF;用固定缓冲区并截取有效数据;手动处理粘包/拆包;encoding/binary解析固定长度二进制头;time.AfterFunc实现可重置超时与心跳;自定义io.Writer带时间戳记录收发流量。402 收藏 -
gomodtidy自动降级或升级依赖是因Go的最小版本选择(MVS)算法:取整个依赖图中满足所有需求的最低版本;运行时会重新计算并可能回退手动升级的版本。402 收藏 -
Go的internal包通过编译器路径检查生效:仅当导入路径含/internal/且调用方在internal目录的祖先路径下才允许导入;它限定编译期API边界,非运行时封装,不可被replace或require绕过。401 收藏 -
Go语言无法仅靠chan实现高可用消息队列,因其缺乏持久化、跨进程通信、故障转移和背压能力;高可用需结合RabbitMQ等中间件,通过连接重试、独立Channel、durable队列、手动ACK、幂等设计及真实健康检查来保障。401 收藏 -
默认http.Client不支持自动重试,需手动封装以避免雪崩;retryablehttp默认不重试429/408,需自定义CheckRetry;手写重试须控制重试条件、指数退避、上下文取消及外层总超时。401 收藏 -
指针数组是固定大小的指针容器,内存连续且不可变;指针切片是动态可变的指针集合,支持灵活扩容与操作,适用于数量不确定的场景。401 收藏 -
cleanenv不支持自动探测格式,仅通过文件后缀识别解析器:.yaml/.yml→YAML、.json→JSON、.toml→TOML;无后缀或错误后缀将静默失败或panic,且不解析内容;ReadEnv与ReadConfig需手动控制加载顺序与覆盖逻辑。401 收藏 -
pebble.Open()后必须检查err并显式管理生命周期,Close()是必须调用而非可选,Get/Put需校验nilkey,批量写需防范超长key,Pebble无schema和跨key事务,仅为裸KV存储。401 收藏