Golang Go语言中 心得分享,如何组织入口文件

这里讨论的是不用框架只用工具库( Toolkit )的情况,否则组织形式只能按照框架的规定,也就没什么讨论空间了。

其实同样的思路还可以用来组织具体的业务代码,整合第三方服务等不少场景。 这里先讲个大概,等过年回家之后再整理篇完整的博客。

入口部分主要是声明退出方式,然后开始初始化流程。

// cmd/app/main.go
package main

func main() { // 在第一次收到 SIG_INT ,SIG_TERM 时结束 Context , // 第二次收到时 os.Exit() ctx, cancel := module.GracefulContext() defer cancel()

// 执行业务逻辑
if err := business.Run(ctx); err != nil {
	log.Fatalf("Error exit: %s", err)
}

}

组装第一层程序结构,主要是:命令行,外部依赖,端口监听。 这里以常见的 HTTP 服务器为例。

// business/app.go
package business

type App struct { module.CLI // 命令行 module.SQLite // 数据库 module.HTTP // HTTP 服务 }

func Run(ctx context.Context) (err error) { var app App return module.Run(ctx, &app) }

module.Run() 会依次初始化 App 中声明的每个 module ,然后运行所有实现了 Run() 的 module 。

初始化的大致流程为:module1.PreInit() -> module1.Init() -> module1.PostInit() -> module2.PreInit() -> ...

至于模块如何声明,就以 module.SQLite 为例:其中 Init()Close() 都是 module 的可选接口。 module.HTTP 还需要实现 Run()

// internal/module/sqlite.go
package module

type SQLite struct { DSN string DB *sql.DB }

func (m *SQLite) Init(ctx context.Context) (err error) { if m.DB, err = sql.Open(“sqlite3”, m.DSN); err != nil { return }

ctx, cancel := context.WithTimeout(ctx, time.Second)
defer cancel()

return m.DB.PingContext(ctx)

}

func (m *SQLite) Close() error { return m.DB.Close() }

module.HTTPmodule.CLI 代码比较长就不贴了,完整的 Demo 在 Github: https://github.com/GotaX/module-demo

有疑问或者想分享下自己是如何组织代码的也欢迎留言讨论。


Golang Go语言中 心得分享,如何组织入口文件

更多关于Golang Go语言中 心得分享,如何组织入口文件的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

更多关于Golang Go语言中 心得分享,如何组织入口文件的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


作为IT领域的GO语言专家,很高兴分享一些关于Golang组织入口文件的心得。

在Golang项目中,入口文件通常位于cmd目录下,该目录下的每个子目录代表一个可执行程序的入口点。这种结构有助于将不同程序的入口点清晰地区分开来,便于管理和维护。

具体来说,可以在cmd目录下为每个可执行程序创建一个子目录,并在该子目录中放置一个或多个main.go文件。这些main.go文件包含main函数,是程序的入口点。

此外,为了保持项目的整洁和可维护性,建议遵循以下最佳实践:

  1. 使用包(package)进行模块化管理,将相关的功能实现放在同一个包中。
  2. 遵循标准的项目结构,如将内部使用的代码放在internal目录下,将公共包放在pkg目录下等。
  3. 合理命名和分层,以提高代码的可读性和可维护性。
  4. 利用Go模块(Go Modules)进行依赖管理,确保项目的依赖关系清晰且可重复构建。

通过这些实践,可以更有效地组织Golang项目的入口文件,提高项目的可维护性和可扩展性。同时,也有助于团队协作和代码复用。

总的来说,Golang提供了一种清晰、简洁且高效的方式来组织入口文件和其他代码。只要遵循最佳实践和项目结构标准,就能轻松地管理大型项目,并确保代码的质量和可维护性。希望这些心得能对你有所帮助!

回到顶部