-
掌握Go基本数据类型关键在于理解用途、边界和陷阱:整数按需选小,禁用int/uint跨平台;float64为默认,禁用==比较浮点数;字符串是UTF-8字节序列,Unicode字符须用rune;bool零值为false,nil不适用于基本类型。
-
接口值存的是具体值的副本(除非原值本身就是指针),因此断言能否成功取决于存入时是值还是指针:值接收者实现时存T则只能断言T,指针接收者实现时通常需存T才能断言T。
-
json.Encoder和json.Decoder适合处理大数据量或流式数据,1.节省内存,2.支持逐条读写,3.适用于大文件、HTTP流、日志处理;使用decoder.Decode()可逐个解析对象,注意EOF判断;使用encoder.Encode()可边构造边输出,避免内存溢出;小数据或结构简单时仍推荐json.Marshal/json.Unmarshal。
-
goroutine泄漏是最隐蔽危险的并发错误,因channel未关闭、锁未释放或select缺少default/case导致goroutine阻塞等待而无法回收。
-
Go不支持直接将不同签名的函数存入同一类型字段,但可通过interface{}类型实现灵活存储与调用,本文详解其原理、安全用法及最佳实践。
-
安全获取私有字段值需先调用setAccessible(true),但Java9+模块化及Java17+强封装下可能失效,须配合--add-opens参数;比对字段差异时应跳过static、transient、Lombok/MyBatis注入字段及record隐式final字段,并归一化类型后比较。
-
Go语言通过反射实现依赖注入,利用reflect包动态解析结构体字段标签(如inject:""),自动为标记的字段赋值,从而解耦组件依赖。
-
首先将Golang应用部署到启用IstioSidecar自动注入的Kubernetes命名空间,通过Docker镜像构建并应用Deployment和Service配置,Istio自动注入Envoy代理实现流量拦截;接着配置Gateway和VirtualService允许外部访问,无需修改代码即可实现流量管理、安全通信与可观测性。
-
当使用:0让GoHTTP服务器自动选择空闲端口时,标准ListenAndServe()不会暴露实际绑定地址;本文详解如何安全、简洁地获取该动态端口,同时复用Go内置的TCPKeep-Alive等默认优化机制。
-
Golang的net/rpc包可实现远程过程调用,需定义符合规则的服务方法和数据结构;2.服务端注册实例并监听HTTP端口,客户端通过Dial连接并调用远程方法;3.异常处理需关注网络错误、超时及服务端返回错误,建议设置连接与调用超时;4.默认使用gob编码,不支持跨语言,适用于轻量级内部通信。
-
sync.Once比手写双重检查更可靠,因其内置原子操作与互斥锁组合,天然解决内存可见性、指令重排和竞态问题,避免nilpanic、未初始化对象返回等错误,且性能优、行为稳定。
-
Go1.16起ioutil.TempFile被弃用,应改用os.CreateTemp;二者签名一致,返回(*os.File,error),且CreateTemp默认权限0600更安全;需注意临时文件清理,避免泄漏。
-
工厂函数返回接口类型时,必须确保所有实现完整满足接口契约,否则编译失败;应先定义接口、用静态检查验证实现,稳定方法签名,避免硬编码和panic,合理注入依赖,并明确声明线程安全性。
-
HTTP客户端请求失败时,err不一定代表网络断开;4xx/5xx状态码下err为nil,需检查resp.StatusCode;真正需重试的是net.OpError、context超时等底层错误,且须保障幂等性。
-
Go的main包虽不可被其他包导入,但可通过gotest*.go同时编译主文件与测试文件,并在packagemain下直接调用内部函数进行单元测试;关键在于测试函数命名规范(TestXxx)和参数类型(*testing.T)。