-
Go字符串原生支持Emoji但需注意UTF-8字节与rune差异;MySQL须用utf8mb4;PostgreSQL更友好但需注意排序;HTTP/HTML/JSON必须显式声明UTF-8编码。172 收藏 -
Go语言推荐使用goimports替代gofmt进行代码格式化,1.goimports兼容gofmt并增强import管理;2.支持自动增删、排序导入包;3.可通过-w参数写入文件,-d或-l预览差异;4.编辑器集成实现保存时自动格式化;5.CI/CD中校验格式一致性,确保代码风格统一。172 收藏 -
Go中通过type关键字定义的命名类型是全新类型,不自动继承底层类型的任何方法;若需复用(如time.Time的Date()、Format()等),应使用结构体嵌入(embedding)实现方法提升(promotion)。172 收藏 -
使用github.com/pkg/errors结合%+v格式可实现带堆栈的错误日志,通过Wrap包装错误以捕获调用堆栈,便于定位问题。171 收藏 -
优先选原生gRPC而非go-micro:gRPC性能高、跨语言强、控制透明,go-microv4虽基于gRPC但抽象过重易调试困难;新项目应从.proto定义、手写Server/Client起步,结合Consul等真实注册中心与自定义resolver实现服务发现。171 收藏 -
在Go中,可通过将底层切片类型(如[]*MyType)定义为命名类型(如typeMyTypes[]*MyType),为其添加方法;关键在于方法接收者和构造函数应使用值类型而非指针,以保持与原生切片语义一致,从而直接使用append并兼容JSON序列化。171 收藏 -
Go接口是隐式实现的,无需显式声明;只要类型方法集完全匹配接口签名(含导出名、参数、返回值),即自动满足,且指针/值接收者影响满足关系。171 收藏 -
Go1.18+泛型需用type参数声明并配合约束,any仅支持基础操作,复杂行为须用具体约束如~[]E、constraints.Ordered或自定义接口;错误约束会导致类型不安全或过度限制。171 收藏 -
Go的net.Conn默认是非阻塞的,由运行时自动调度goroutine,无需手动实现类似JavaNIO的轮询机制;用户应使用同步风格代码,配合超时控制和并发优化。171 收藏 -
.editorconfig在Go项目中易失效,因其不被Go插件默认读取,且需正确配置indent_style=tab等项以配合gofmt,而非对抗;须确保编辑器启用、路径匹配、无覆盖设置。171 收藏 -
优化Golang微服务网络通信需优先采用HTTP/2+gzip/zstd压缩响应体,并复用HTTP连接池;gRPC+Protobuf适用于高吞吐场景;须避免重复压缩、TLS层压缩及局部创建http.Client。171 收藏 -
GoHTTP测试核心是用httptest.NewRequest和httptest.NewRecorder绕过网络、直接测试handler,结合mock依赖与框架适配,覆盖成功及错误路径。170 收藏 -
Go中无接口继承,Observer模式通过函数类型和接口组合实现:Observer为func(eventinterface{})类型,Subject接口仅含Register、Unregister、Notify方法;并发安全需用sync.RWMutex细粒度锁,Notify时先拷贝观察者快照再解锁遍历,避免map并发读写与阻塞。170 收藏 -
不能直接修改default-scheduler源码,因其为独立二进制,修改即维护fork分支,导致升级困难、安全滞后、无法享受调度框架演进;应通过编写外部调度器实现可维护扩展。170 收藏 -
高并发下本地磁盘IO瓶颈无法靠增加goroutine解决,必须解耦I/O与CPU工作:单goroutine顺序读+合理缓冲(如64KB)+按逻辑边界分块处理,避免多goroutine争抢同一文件导致寻道恶化。170 收藏