最佳的go实践:怎样做到舒适编码

本文介绍了三个Go编程的最佳实践:1) 包布局,包括从平面布局开始,按责任组织包,以及使用cmd目录存放main包;2) 熟悉context.Context的使用,如发送取消信号、设置超时和存储请求相关值;3) 了解TDD(表格驱动方法)来编写高效测试。通过这些实践,开发者可以提高Go编程的效率和代码质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这篇文章中,我想根据我过去几年写go的经验,介绍三个go最佳实践。

简要:

  • 什么是 "最佳 "做法?

  • 实践1:package布局

  • 实践2:熟悉context.Context

  • 实践3:了解TDD(表格驱动方法)

  • 去尝试吧!

什么是 "最佳 "做法?

有很多做法:你可以自己想出来,在互联网上找到,或者从其他语言中拿来,但由于其主观性,并不总是容易说哪一个比另一个好。”最佳”的含义因人而异,也取决于其背景,例如网络应用的最佳实践可能与中间件的最佳实践不一样。

为了写这篇文章,我带着一个问题看了go的实践,那就是 "它在多大程度上让我对写Go感到舒服?",当我说"语言的最佳实践是什么?"时,那是在我刚接触这门语言,还没有完全适应写这门语言的时候。

当然,还有更多的做法,我在这里不做介绍,但如果你在写go时知道这些做法,就会非常有用,但这三个做法对我在go中的信心影响最大。

这就是我选择"最佳"做法的原因。现在是该上手的时候了。

实践1:package布局

当我开始学习go时,最令人惊讶的事情之一是,go没有像Laravel对PHP,Express对Node那样的网络框架。这意味着在编写网络应用时,如何组织你的代码和包,完全取决于你。虽然在如何组织代码方面拥有自由是一件好事,但如果没有指导原则,很容易迷失方向。

另外,这也是最难达成一致的话题之一;"最佳 "的含义很容易改变,这取决于程序处理的业务逻辑或代码库的大小/成熟度。即使是同一个代码库,当前的软件包组织在6个月后也可能不是最好的。

虽然没有单一的做法可以统治一切,但为了补救这种情况,我将介绍一些准则,希望它们能使决策过程更容易。

准则1:从平面布局开始

除非你知道代码库会很大,并且需要某种预先的包布局,否则最好从平面布局开始,简单地将所有的go文件放在根文件夹中。

这是一个来自github.com/patrickmn/g…软件包的文件结构。

❯ tree . ├── CONTRIBUTORS ├── LICENSE ├── README.md ├── cache.go ├── cache_test.go ├── sharded.go └── sharded_test.go 复制代码

它只有一个领域的关注:对数据缓存,对于像这样的包,甚至不需要包的布局。扁平结构在这种情况下最适合。

但随着代码库的增长,根文件夹会变得很忙,你会开始觉得扁平结构不再是最好的了。是时候把一些文件移到它们自己的包里了。

准则2:创建子包

据我所知,主要有三种模式:直接在根部,在pkg文件夹下,以及在internal文件夹下。

在根部

在根目录下创建一个带有软件包名称的文件夹,并将所有相关文件移到该文件夹下。这样做的好处是:

  • 没有深层次/嵌套的目录

  • 导入路径不杂乱

缺点是根文件夹会变得有点乱,特别是当有其他文件夹如scripts、bin和docs时。

在pkg包下

创建一个名为pkg的目录,把子包放在它下面。好的方面是:

  • 这个名字清楚地表明这个目录包含了子包

  • 你可以保持顶层的清洁

而不好的方面是你需要在导入路径中有pkg,这并不意味着什么,因为很明显你在导入包。

然而,这种模式有一个更大的问题,也是前一种模式的问题:有可能从版本库外部访问子包。

这对私人仓库来说是可以接受的,因为如果发生这种情况,在审查过程中会被注意到,但重要的是要注意什么是公开的,特别是在开放源码的背景下,向后兼容性很重要。一旦你把它公开,你就不能轻易改变它。

有第三个选择来处理这种情况。

在internal包下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值