设计思想是 GoFrame 框架的灵魂,同时对于使用者来讲,是不可或缺的内功心法。
授人予鱼不如授人以渔,比起技巧性的框架、组件使用,我们想尽可能地告诉大家为什么这样、为什么那样。
GoFrame 有其独特的设计思想,理解了 GoFrame 的设计思想,您就理解了 GoFrame 的全部。
📄️ 模块化设计
介绍软件模块化设计的核心原则和 GoFrame 框架的模块化实践,包括模块的定义、模块化目标(解耦和复用)、模块复用三大原则(REP 复用/发布等同原则、CCP 共同闭包原则、CRP 共同复用原则)及其竞争关系。GoFrame 框架采用模块聚合设计,统一维护通用性的核心模块,提高可维护性,降低接入和维护成本,解答了编译型语言与解释型语言在模块依赖处理上的差异。
📄️ 统一框架设计
介绍GoFrame统一框架设计的意义和必要性,包括技术体系化(体系完善、组件丰富、规范统一、设计严密)、开发规范化(代码结构、分层模型、封装设计)、组件统一化(收归统一管理、降低选择成本)、版本一致性(降低维护复杂度)、解决方案沉淀(工具和代码形式优先)、避免资源浪费(避免重复造轮)等六大方面,使得开发人员能够将精力关注于业务本身。
🗃️ 工程开发设计(🔥重点🔥)
6 个项目
📄️ 全链路跟踪设计
介络GoFrame框架的全链路跟踪设计,包括对OpenTelemetry(OTEL)标准的完整支持、统一框架下的标准落地、日志组件的链路跟踪支持、规范检测工具的自动链路丢失检测,解决了项目实践中第三方组件未严格执行标准、组件杂乱无章、业务逻辑易丢失链路等常见痛点,保障项目质量和问题定位效率。
📄️ 全错误堆栈设计
介绍 GoFrame 框架的全错误堆栈设计,包括统一的错误处理组件、统一的错误处理方案、全组件对带有错误堆栈的 error 返回支持、关键组件的错误堆栈打印功能。解决了项目实践中缺少统一错误处理方案、日志打桩随处可见、错误堆栈缺失难以定位、第三方组件错误不带堆栈等常见痛点,降低错误排查和维护成本。
📄️ 接口化与泛型设计
介绍 GoFrame 框架的接口化与泛型设计理念,核心组件均采用接口化设计,允许使用者自定义实现替换底层接口,实现强大的灵活性和扩展性。通过 Adapter 模式实现组件接口层设计,提供多种默认实现供选择。泛型设计提高参数灵活性、简化使用复杂度,统一使用方式屏蔽底层影响,如 gsession 组件的 Storage 接口设计和数据类型转换。
📄️ 隐式与显式初始化
介绍程序启动时的初始化操作,包括隐式初始化和显式初始化两种方式。隐式初始化通过包的 init 方法执行,隐藏初始化细节但出错时难以定位。Golang v1.21 后 init 执行顺序发生变化,建议复杂初始化逻辑使用显式调用。显式初始化要求在 main 或 boot 模块中调用特定方法,更易于错误处理和问题定位。GoFrame 框架的基础组件多采用隐式初始化,而业务模块建议使用显式初始化。
📄️ Golang枚举值管理
在Go语言中实现枚举值,虽然Go语言本身不支持enum定义,但是可以通过const来模拟枚举类型。这种方法在Kubernetes项目中广泛使用。此外,本文还探讨了如何在跨服务调用和前后端协作中高效维护枚举值的问题,并提供了使用OpenAPI标准协议与相关工具来实现的方法。
📄️ Context共享变量
通过使用GoFrame框架中的Context传递和管理上下文流程中的共享变量。在Go网络应用中,尤其是HTTP/RPC服务中,Context是传递异步IO控制和上下文变量的关键工具。通过结构化对象的共享,本文展示了如何在请求过程中实现变量传递,确保请求链路中变量的一致性和灵活性。