Golang中关于Go+Gin教程的一些思考
Golang中关于Go+Gin教程的一些思考 https://chenyitian.gitbooks.io/gin-tutorials/
有人试过这个关于 Gin + Go 的教程吗?我尝试通过它来学习 Gin 和 Go,但我的代码最终出现了很多问题。此外,根据我对 Go 的有限理解,这个教程似乎有很多不规范的地方,比如使用像 handlers.article.go 这样的文件名,而不是 handlers/article.go,并且可能将包声明为 handlers。所有的文件都被打包在 main 包下。
我是不是漏掉了什么?我想知道是否有人已经完成了这个教程。
更多关于Golang中关于Go+Gin教程的一些思考的实战教程也可以访问 https://www.itying.com/category-94-b0.html
嗯,这似乎是我的问题。 我对完整阅读你提到的教程兴趣不大。但快速浏览后,该教程给我的感觉和我之前说的一样。不过,对这类公开教程的评判不宜过于严苛。
更多关于Golang中关于Go+Gin教程的一些思考的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
首先,我不建议初学者直接上手 gin,尽管它被很多人强烈推荐。 我个人建议从标准库的 http 开始学习,以理解其设计结构、处理逻辑等。当你基本掌握了标准库的 http 后,你会发现上手那些第三方库会很容易。
至于这个教程,粗略看了一下,似乎营养不大。
好的,明白了。我想思路基本一致。
我们已经放弃了 Go + Gin 的方案,并开始规划另一个让我感到兴奋的改进项目:)。这同样涉及一些数据库代码和编写一些 Go API。下周很可能将会很有趣。我们会先做好整体规划,然后稳步推进。
感谢你们两位的帮助。
感谢您的解释。是的,我也怀疑这可能是一个非常旧的教程。
我会向我的上级汇报同样的情况。我们拥有一个旧项目的可能性较小。因为我们的公司和项目本身才成立了五年。现在,我很好奇为什么偏偏给我这个教程来建立对Go和Gin的理解,以便更好地理解我们的代码库。
@Dean_Davidson 你能推荐一些好的教程,用于熟悉后端方向的 Go 语言和 Gin 框架吗?我和他谈过,他说他只是随机给了这个任务,主要是希望我建立对这门语言和框架的熟悉度和熟练度,以便更好地理解。其他任何教程也可以。
嗯,我觉得你的讨论方向有点跑偏了。我想知道的是大家对那个教程的看法。这个话题一开始就不是特别、特别、特别针对“Gin”框架的。我想问的是,是否有人和我一样,对那个教程有同样的感受。
无论如何,我想等等看,是否有人能分享一些关于那个教程的有用或简短的看法。
如果你正在学习应用程序服务,最简单的方法是从入口点阅读源代码。 如果你正在学习工具库,最简单的方法是从导出的全局方法和结构体开始阅读源代码。 这是一种全局学习的方法。如果你想有针对性地理解,可能需要定位到你需要的源代码并进行阅读。 这是我个人的学习方法。当然,最愉快的方式是通过示例代码来学习。
正如 @peakedshout 所提到的,官方文档中的示例非常详尽。此外,go.dev 上还有一个入门指南,但内容更为基础。你主要还是需要通过动手构建项目来学习,所以我建议直接选择一个你想构建的东西,然后开始构建它。
我不太确定你的意思。 如果你指的是如何学习一个全新的代码库。那么我的方法是先理解它是什么,然后了解有哪些方法(有些代码库会提供教程代码),接着尝试调用它来构建你自己的演示代码。 如果你指的是想更深入地了解这个代码库,我认为没有什么比自己动手写一个替代品更有收获的了。(就像我大部分的编程知识,都是因为我想做某件事而学到的)
peakedshout:
至于这个教程,我快速浏览了一下,感觉内容不太充实。
是的。而且,我也不太相信那些关于“精通”之类的说法。我喜欢在实践中摸索一切。我对结构和处理日志有相当不错的理解,我是在尝试处理一个足够大的 Go 代码库后才来到这里的(虽然确实提交过一些 PR)。我的前辈们只是希望我完成这个教程,以便我能更好地理解我们大量使用 Gin 框架的代码库。
如果你在一个相当庞大的代码库上工作,而无需自己重写代码,这时理解现有代码库就变得至关重要。在我开始之前,我是一个天真的非程序员,而在编写那个小功能的过程中,我对代码库有了一些了解。我们是一家软件服务公司,因此每秒都有大量的函数/方法调用、数据库写入等操作在进行,所以这些调用中的任何一个都可能有所帮助。
我认为我的问题其实很简单,但可能由于我在问题后面所做的解释,让读者感到困惑了。
是的,我同意。在看了Gitbook的前两三页后,我就注意到了这些问题。我当时为了完成一些任务直接一头扎进了代码库,因此不得不摆弄很多东西,在这个过程中,我大致理解了一个代码库需要具备什么样的结构才能正确运行后端。我注意到这个教程完全没有遵循这种结构。
我尝试将代码库分发到不同的包中(handlers、models和testing),但undefined错误一直出现。可能,我会尝试调试它们,或者直接请我的经理给我另一个任务。😄
是的,我查看了那个教程,也找到了之前你推荐它的那个帖子。我觉得它太基础了,不太能引起我的兴趣 :(。很可能,我会直接和我的上级沟通,开始动手构建一些东西,以便更好地理解代码库。
还有一个问题想请教你,你是如何学习或研究一个代码库的?你有什么特定的方法吗?我上周接手了一个关于我们Go代码库的小功能。我的做法是:我把任务钉在屏幕上,构建一个伪算法,基本上为我想要的东西搭建一个结构。然后开始在代码库中搜索相关的方法/函数,使用ripgrep或neovim telescope来查找是否已经有现成的实现,以避免重复造轮子,并理解我要写的这个功能应该放在代码库的Handlers、controllers还是repository层,然后就开始动手写。
真的很想知道你的方法。
我浏览了代码库,也同意像 handlers.articles.go 这样的文件名有点奇怪。使用 common_test.go 也不太符合 Go 的惯用法。我认为他们当时是想把代码拆分到不同的文件中,同时保持包结构的扁平化。注意到没有 go.mod 文件吗?因为这个项目早于 Go Modules 出现(初始提交是 2016 年 6 月 14 日!)。所以,我认为这是在模块化出现之前(而且当时社区中的某些惯用法也不那么根深蒂固)保持结构扁平/简单的一种方式,现在它已经过时了。
如果你被某些问题卡住了,去和指派你完成这个教程的高级开发人员谈谈。我相信他们心里有特定的原因。如果你在挣扎,就请求帮助(这是他们的工作,而且初级开发人员寻求帮助比独自折腾太久要好得多!)。可能的情况是:你正在维护的某个模块已经有 11 年历史了,也早于 Go Modules,因此他们想让你了解他们的遗留代码是什么样子的,等等。
再问你一个问题,你是如何学习或研究一个代码库的?
这真的要看情况。经验越丰富,你就越能通过浏览代码来理解它的所有功能。但对于大型项目,即使你有经验,要完全理解它的一切也是很困难的。
例如:如果你想浏览 julienschmidt/httprouter 的代码,我敢打赌你可以在相对较短的时间内理解其 80% 的功能。但如果你想理解 这个项目 中的所有代码呢?
我经常与各种云平台进行集成。看看 这个 godoc。这只是一个云提供商的一个服务。我想说的是:对于这类大型项目或平台,你基本上必须依赖文档。通常,像这样的大型参与者都有优秀的文档和可供参考的好例子。
所以,我同时依赖文档和探索代码。这真的取决于我正在做什么以及我正在使用的包。就你的情况而言,如果你不确定从哪里开始,我会去问给你分配这些任务的高级开发人员。没有人会因为寻求指导而责怪你(事实上,当你遇到困难时寻求帮助是一个好习惯!)。但是,如果你不问,然后什么也做不出来,他们肯定会责怪你。 🙂
这个教程确实存在一些不符合Go语言惯例的地方。主要问题在于包结构的设计。
在标准Go项目中,通常按功能或层级划分包,而不是把所有文件都放在main包下。教程中使用的handlers.article.go这种命名方式也不符合Go的命名规范。
下面是一个更符合Go惯例的Gin项目结构示例:
// 正确的包结构示例
project/
├── go.mod
├── main.go
├── handlers/
│ ├── article.go
│ └── user.go
├── models/
│ └── article.go
└── routers/
└── router.go
在handlers/article.go中应该这样声明包:
package handlers
import (
"net/http"
"github.com/gin-gonic/gin"
)
func GetArticle(c *gin.Context) {
// 处理逻辑
c.JSON(http.StatusOK, gin.H{
"message": "获取文章成功",
})
}
在main.go中导入并使用:
package main
import (
"your-project/handlers"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/article", handlers.GetArticle)
r.Run(":8080")
}
教程中将所有文件都放在main包的做法虽然能运行,但会导致:
- 代码组织混乱,难以维护
- 包间依赖不清晰
- 无法进行有效的单元测试
如果你刚开始学习Gin,建议参考官方文档和更符合Go惯例的教程。Gin的GitHub仓库提供了完整的示例代码,结构更加规范。

