因由
跟着UP敲完代码之后感觉什么都没搞懂,只得其型不得其意,这样的学习结果毋庸置疑是没有用的,只会陷入教程地狱的困境,以是我决定从头阅读一遍源码,结合文档和大模型,来学习一遍
预备工作
由于跟写的时候是有边用git进行版本控制的,在完工之后我便将云服务器上的工程上传到我的仓库里了:该项目仓库链接
现在我将其拉到GoLand里,因为个人觉得GoLand阅读源码要比Vscode来得更轻松一些
项目结构
可以看到整个项目结构其实很简便,其本身就是一个很轻量级的后端项目而已
点击查看结构- |_config: 端口、数据库配置文件和代码
- |_controller: 控制器代码
- |_global: 全局变量管理代码
- |_middlewaves: 中间件(登录验证等)
- |_models: 数据模型代码
- |_router: 路由管理代码
- |_utils: 工具和辅助代码
- |_go.mod: go包管理
- |_go.sum: go包管理
- |_main.go: 程序启动入口
- |_README.md: 文档
复制代码 第一份代码main.go
毫无疑问这份代码的入口是main.go程序,想要查看代码我们就从这里开始
点击查看main.go[code]package mainimport ( "context" "exchangeapp/config" "exchangeapp/router" "log" "net/http" "os" "os/signal" "time")func main() { config.InitConfig() r := router.SteupRouter() port := config.AppConfig.App.Port if port == "" { port = ":8080" } srv := &http.Server{ Addr: port, Handler: r, } go func() { if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("listen: %s\n", err) } }() quit := make(chan os.Signal, 1) signal.Notify(quit, os.Interrupt) |