-
Go的json.Unmarshal依赖反射,仅处理导出字段(首字母大写),非导出字段无论有无json标签均被忽略;常见错误是字段未导出或标签拼写错误导致解析后仍为零值。302 收藏 -
slog默认无时间戳和文件行号是因设计上“显式优于隐式”,需手动启用AddSource;time字段自动添加但不可定制格式;WithGroup创建嵌套命名空间,With用于扁平键值;自定义Handler须实现Enabled、WithAttrs、WithGroup三方法。455 收藏 -
减少锁竞争提升Go并发性能的关键是减小锁粒度、使用读写锁、原子操作、channel通信和sync.Pool。1.分片锁降低争抢;2.RWMutex提升读多场景性能;3.atomic实现无锁计数;4.channel避免共享内存;5.sync.Pool复用对象减轻分配压力。159 收藏 -
rate.Limiter是基于令牌桶算法的轻量限流方案,需按IP或用户维度隔离实例并用sync.Map缓存,正确提取真实IP,分层实现全局限流与单用户限流,拒绝而非阻塞请求。110 收藏 -
不慢,typeassertion本身开销极小,真正拖慢的是断言失败后的反射/泛型回退、hotpath上无谓断言,或误用interface{}替代带方法接口导致的动态分发。255 收藏 -
Go中直传文件到对象存储需构造合法HTTP请求:严格匹配Content-Type、预留签名过期时间、按policy顺序构造multipart字段;大文件用os.Open+io.MultiReader流式上传;解析Markdown图片应使用blackfridayAST遍历而非正则;错误处理须读取原始响应体并区分各服务商格式。110 收藏 -
range和with会重置.指向当前迭代值或传入对象,$始终指向根数据;访问外层字段须用$.Field或提前绑定变量(如$name:=$.Name),否则渲染为空。418 收藏 -
GitHubActions可实现Golang微服务CI/CD流水线:统一用Makefile构建、kustomize分环境管理K8s配置、分离/live与/ready健康检查端点,并规范镜像tag与部署流程。210 收藏 -
Go的net.Conn默认是非阻塞的,由运行时自动调度goroutine,无需手动实现类似JavaNIO的轮询机制;用户应使用同步风格代码,配合超时控制和并发优化。418 收藏 -
os.ReadFile仅支持本地文件读取,无法处理分布式场景下的节点定位、副本一致性及网络分区问题,必须通过元数据服务路由请求。318 收藏 -
用http.ListenAndServe启动服务端口被占会静默失败,应显式构造http.Server实例捕获并打印底层错误;默认Handler为nil时使用http.DefaultServeMux,但推荐显式创建http.ServeMux提升可控性与可测试性。382 收藏 -
Gosort包不支持自动推断类型排序,需用sort.Ints/sort.Strings等专用函数排基础类型,或实现sort.Interface接口排自定义类型;所有排序原地进行、稳定、时间复杂度O(nlogn)。265 收藏 -
Go的yaml.v2库要求结构体字段必须导出(首字母大写)且通过yaml标签显式映射,否则无法访问字段,导致反序列化后结构体为空。本文详解原因、修复方法及最佳实践。431 收藏 -
Go语言中虽允许将方法接收者命名为this,但违背官方代码规范,且易引发语义混淆——因Go的接收者可为值或指针,而this暗示“当前对象指针”,与语言设计哲学相悖。113 收藏 -
Go中遍历结构体字段需用reflect包,仅支持导出字段:用reflect.TypeOf获取类型,NumField()和Field(i)遍历,field.Name、field.Type、field.Tag分别获取字段名、类型、标签;非导出字段被忽略。358 收藏