-
Go的json包默认行为易踩坑:导出字段需显式jsontag才能正确编解码;小写/下划线字段须用json:"key"映射;omitempty会丢弃false和0;动态结构宜用json.RawMessage延迟解析;类型不匹配时静默失败,需手动校验;高频场景应避免反射开销。
-
Go语言if条件必须为bool类型,不支持隐式转换;推荐带初始化的if、switch处理枚举值、卫语句提前返回。
-
答案:Go中slice和map为引用类型,但需指针操作以修改其本身;slice传指针可改变结构,map通常无需指针仅在重置时使用,二者均需注意初始化与判空。
-
Go微服务中配置mTLS需手动设置tls.Config:服务端用RequireAndVerifyClientCert+ClientCAs,私钥权限0600;gRPC需在Interceptor中解析TLSInfo获取身份;灰度迁移宜双端口或反代透传;curl报错多因未指定CA证书。
-
最可控的GoHTTP客户端重试方案是自定义RoundTripper配合http.Client,重点判断值得重试的错误类型:网络超时、连接拒绝、5xx响应;避免对4xx(如400)和健康检查等请求盲目重试。
-
Go数组传参默认值拷贝,[3]int是数组、[]int是切片;数组赋值/传参全量复制,修改副本不影响原数组;避免拷贝需传*[3]int指针;切片传参拷贝结构体但共享底层数组,元素修改生效,append或切片操作不反馈原变量。
-
Go语言通过显式错误返回和panic/recover机制提升程序健壮性,强调错误处理的清晰性与主动性,要求开发者在函数调用中显式处理error,避免隐藏异常流,并利用错误包装传递上下文,同时限制panic/recover仅用于不可恢复的严重错误,确保控制流可预测、可维护。
-
Go的encoding/json包要求结构体字段导出(首字母大写)才能解析,非导出字段被静默跳过;需用json:"key"标签显式映射,支持蛇形转驼峰但有限制;数组/对象须严格对应切片/struct;空值处理推荐*T或json.RawMessage;混合类型应先用map[string]json.RawMessage延迟解析。
-
本文介绍如何使用Go的反射机制实现通用的结构体字段清空功能,重点说明必须传入指针、利用reflect.Zero重置值,并强调生产环境中更推荐显式赋零或定义Reset方法。
-
答案:Go通过net、io和bufio等标准库提供高效网络数据流处理能力,支持TCP/UDP连接建立、流式读写、结构化数据解析及错误控制。使用net.Dial建立连接后,可通过io.ReadWriter接口进行数据收发;结合bufio实现缓冲读写提升性能,适用于文本或二进制协议分帧;利用json.Decoder或encoding/binary解析JSON、Protobuf或自定义格式;通过SetReadDeadline/SetWriteDeadline设置超时,配合error判断与context控制实现健
-
Go项目打包发布可用gobuild直接生成单个可执行文件,但需注意跨平台编译、依赖嵌入、版本信息注入、图标与窗口配置等问题;推荐通过GOOS/GOARCH交叉编译、-ldflags注入变量、embed.FS打包资源,并在干净环境验证。
-
Go初始化struct有四种方式:①字面量需显式赋值所有字段(含未导出字段);②new(T)和&T{}生成零值指针,后者支持字段名初始化;③NewXXX构造函数封装校验与默认值;④嵌入结构体须用字段名避免歧义。
-
应使用sync.Once(或Go1.21+的sync.OnceValue)实现单例,因其保证初始化仅一次、并发安全、语义清晰;直接用全局变量破坏封装且不安全,手动sync.Mutex易出竞态,且单例对象自身也需线程安全。
-
Go中应使用结构体Builder而非函数式选项的情况包括:需中间校验、字段间有依赖或互斥、构建过程需复用组合、强调逐步声明;目标结构体字段应小写不导出以确保强制约束,Build()必须返回error而非panic。
-
Go1.13+默认启用模块代理,私有模块需配置GOPRIVATE跳过代理与校验,配合gitURL重写解决协议认证问题,必要时结合GOPROXY自建代理或replace临时调试,但发布前必须移除replace。