How I Structure New Projects In Golang

Anthony GG
3 Oct 202321:31

Summary

TLDR本视频由一位创业者讲述,他介绍了他的公司Laue近期开始进行的2.0版本重写过程。他解释了原项目是用Next.js和TypeScript编写的,但由于公司规模和项目范围的显著变化,他们决定将后端改写为使用Go语言,前端使用SvelteKit。视频中详细讨论了Go项目结构的设置,强调没有绝对的项目结构模式,而是应根据项目需求灵活调整。他还提到了如何处理数据库、业务逻辑、以及如何通过简化的方法有效地管理代码。此外,他鼓励开发者拥有结果驱动的开发心态,并提供了关于如何组织代码、选择框架和处理性能考虑的实用建议。

Takeaways

  • 😊没有绝对完美的项目结构,选择什么结构要根据自身团队需求决定
  • 👍使用 make 构建命令非常简单实用
  • 💡把逻辑分别放到 handlers、packages、data 等文件夹中可以很好地组织代码
  • 📁利用 types 文件夹存储共享的类型定义
  • 🔨利用 util 文件夹存储公共的工具函数
  • ⚙️handlers 只关注请求处理,业务逻辑放到 packages
  • 📦data 文件夹处理所有数据库相关逻辑
  • 🌈不必局限于后端或前端开发者的身份,要学会全栈思维
  • ✅测试业务逻辑用单元测试,测试数据逻辑用集成测试
  • ☝️简单的结构容易扩展,要用结果导向的方式迭代改进

Q & A

  • Laue公司是什么时候成立的?

    -Laue公司是三年前成立的。

  • 为什么Laue公司决定进行2.0版本的重写?

    -因为Laue公司最近获得了大量资金,且项目范围发生了显著变化,需要扩大规模。

  • Laue 2.0版本后端和前端分别采用了哪些技术?

    -后端采用Go语言编写,前端使用SvelteKit。

  • 视频中提到的'CMD文件夹'在Go项目结构中起什么作用?

    -CMD文件夹包含独立的包,每个包中都有一个main.go文件,用于引导不同的应用程序,比如API服务。

  • 为什么作者认为在编程中没有完美的项目结构?

    -因为编程领域中,很多人会强加他们创建的编程范式,认为它是最好的。但实际上,每种方法都有其好处和不足,应根据具体情况灵活调整。

  • 在Go项目中,作者如何看待性能问题?

    -作者认为,性能在大多数情况下不应该是主要关注点,因为在达到性能瓶颈之前,项目通常会有很大的用户基础,届时解决性能问题是可行的。

  • 什么是'result driven development mindset',作者为什么推荐它?

    -结果驱动开发心态意味着专注于实现目标和结果,而不是过分关注使用的工具和包的组织方式。作者推荐它,因为它鼓励开发人员根据实际情况灵活调整,专注于产出。

  • 视频中提到使用什么工具管理数据库迁移?

    -作者提到使用了一个简单的脚本来管理数据库迁移,尤其是在开发过程中处理数据库处于“脏状态”的情况。

  • 为什么作者提倡在开发中避免过度使用第三方CLI包?

    -作者认为使用简单脚本可以有效地完成任务,而不需要引入可能复杂和过度的第三方CLI包,从而保持项目的简洁性。

  • 在讨论Go项目结构时,作者如何处理全局变量的使用?

    -虽然全局变量在某些情况下可能带来风险,但作者认为,如果在正确的时间和地点使用,全局变量是可以接受的。尤其是在数据库实例的上下文中,全局变量可以简化数据访问。

Outlines

plate

此内容仅限付费用户访问。 请升级后访问。

立即升级

Mindmap

plate

此内容仅限付费用户访问。 请升级后访问。

立即升级

Keywords

plate

此内容仅限付费用户访问。 请升级后访问。

立即升级

Highlights

plate

此内容仅限付费用户访问。 请升级后访问。

立即升级

Transcripts

plate

此内容仅限付费用户访问。 请升级后访问。

立即升级