-
Go语言通过GoMobile工具支持移动端开发,需安装Go1.19+、Git、AndroidSDK/NDK及Xcode;使用gomobilebind命令将Go代码编译为AndroidAAR或iOSFramework库文件,供原生项目调用,结合gomobilebuild可构建并安装测试APK,确保环境变量与版本兼容即可完成交叉编译。
-
Go双向链表需用prev/next指针维护前后关系,插入删除必须同步更新两侧指针;节点与链表结构中指针初始为nil防panic;头插、尾插、删节点均需分空链表与非空情况处理头尾指针及连接关系。
-
Golang读取配置文件常用库有viper和ini。viper支持多种格式(如JSON、YAML、TOML等),可自动绑定结构体,适合复杂项目;而ini专注于INI格式,轻量简洁,适合简单场景。1.viper优点包括多格式支持、结构体绑定、配置监听,缺点是学习成本高;2.ini优点为语法清晰、使用轻量,缺点是功能单一、需手动赋值。选择依据:若项目复杂且需多来源配置,选viper;若配置简单且固定为INI,选ini。
-
zap.String仅构造Field不输出日志,需传给Logger/Sugar方法(如Info)才生效;字段名重复时后写覆盖前写;性能敏感时优先用zap.Int等原生函数避免字符串拼接分配内存。
-
在Golang中设置请求Header需用req.Header.Set或Add方法,且必须在http.DefaultClient.Do前完成;自定义Host头须设req.Host字段;Content-Type需在NewRequest后设置;不可手动设Content-Length或Transfer-Encoding。
-
rate.Limiter的Allow()仅非阻塞试探,失败后继续处理会破坏限流语义;Wait()才是带等待语义的正确入口,适用于必须执行且延迟不敏感的场景。
-
redis-cell是Go分布式限流最省心的选择,因其CL.THROTTLE命令将令牌桶逻辑封装在Redis服务端,Go客户端只需调用一条命令并解析五元组响应,无需处理时间窗口、并发竞争或本地状态。
-
Go的JSON序列化默认通过structtag控制,无需手动反射;仅在需动态字段名、批量检查或构建通用工具时才需主动用反射解析tag。
-
空接口在Go语言中非常实用,其定义是没有方法的接口,任何类型都默认实现它,因此可用作通用类型的容器。①空接口可作为泛型替代方案,在Go1.18之前广泛用于处理多种类型,如fmt.Println函数;②使用时需进行类型断言来提取实际类型,例如用i.(string)或带判断的if语句;③可结合switch语句处理多类型;④反射机制可用于动态获取值、调用方法、修改字段等操作;⑤反射适用于ORM框架、序列化工具等高级场景,但性能低且易出错;⑥建议优先使用类型断言而非反射,并在支持泛型时优先使用泛型以提高类型安全和
-
超时错误本质是context.DeadlineExceeded,须用errors.Is(err,context.DeadlineExceeded)判断;HTTP客户端需分层设Timeout、DialContext和ResponseHeaderTimeout;禁用time.AfterFunc替代上下文超时,数据库操作必须用Context方法。
-
Go中需显式检查指针是否为nil再解引用,因nil指针解引用会直接panic;所有可能为nil的指针(如函数返回、map查找、结构体字段等)都必须判空,常见场景包括json.Unmarshal后、HTTP请求嵌套字段、sql.NullString等。
-
Casbin是Go生态RBAC权限控制的事实标准,支持多模型、不绑定框架,推荐用NewEnforcer快速启动,生产环境切换适配器并手动LoadPolicy,权限检查需透传资源ID、统一拦截返回403,模型文件字段顺序必须严格对齐,敏感操作须叠加二次验证与完整审计日志。
-
Go原生map并发写会panic,因运行时主动检测并中止;sync.Map适用于读多写少、键生命周期长场景,不适用于高频增删或需遍历/有序迭代的场景。
-
gofix是Go1.0到1.12期间用于自动修复过时API调用的工具,但自Go1.13起已被正式弃用,命令不再可用;现需结合golist-u-mall、goget、govet、gopls快速修复及手动验证完成迁移。
-
基于Git与GitHubActions实现Golang项目CI/CD,通过Webhook触发流程,集成代码检查、测试、Docker镜像构建及多环境部署,结合缓存优化与人工审批,提升发布效率与稳定性。