slot deposit pulsa slot mahjong slot gacor slot gacor slot gacor resmi slot gacor 2025 slot gacor terpercaya slot gacor 2025 slot gacor hari ini slot gacor hari ini slot gacor hari ini
如何组织你的 Go 代码
17611538698
webmaster@21cto.com

如何组织你的 Go 代码

编程语言 0 710 2024-12-23 09:00:33

刚接触 Go 的开发人员可能会面临以下的诸多迷惑:

应该如何组织我的 Go 代码?应该创建哪些目录?有多少嵌套层级?应该将哪些文件放在哪里?测试和测试数据如何?我应该遵循这个和那个模板吗?我们可以自动生成项目结构吗?

如果你有在开发 Rails 或 Django Web 应用程序开发经验,那么刚刚接触 Go 时,可能会感到迷惑。你可能会看到人们创建目录树,用空文件填充它们,然后尝试将不断增长的 Go 代码放入其中。

在某个时刻,你很快就会恍然大悟,然后你会问:这是一种很好的、很直接的方法吗?

让我们开始构建一个新项目。我们的第一步是什么?我们需要从哪里开始?为Shodan服务创建一个 Go API 客户端。Shodan 是世界上第一个专注于互联网连接设备的搜索引擎。你想知道你所在城镇不安全的网络摄像头的 IP 地址吗?你知道你为邻居配置的服务器是否暴露了他的私人数据吗?使用Shodan,寻找安全漏洞是一个有趣又令人兴奋的旅程。

首先需要考虑项目名称,这也是 GitHub 上 Go 模块的名称。

为了练习,我们将其命名godan为 Shodan 的 Go SDK/API。

godan

有了名字之后,我们再创建一个同名的目录。

mkdir godan

完成了第一步后,让我们进入新家并开始布置内部设施。

cd godan

创建 Go 模块(包)

我们的下一步是初始化godan目录并使其成为 Go 模块的主目录。为此,我们使用命令go mod init。由于我们将在 GitHub 上托管该模块,因此我们将其命名为github.com/qba73/godan。

go mod init github.com/qba73/godan

完成此步骤后,目录godan中有一个文件:go.mod。该文件是什么样的?

go.mod

module github.com/qba73/godan

go 1.23.4

第一行是模块的名称。下一行告诉我们将使用哪个版本的 Go。请注意,Go 的版本与您的机器上安装的版本相匹配!

到目前为止一切顺利。下一步是什么?不,我们目前不需要任何目录。我们不需要担心哪些代码是内部的,哪些不是——忘掉它吧!我们需要创建两个文件:一个用于测试,一个用于我们的代码。

让我们来创建它们。

touch godan_test.go

touch godan.go

你注意到了这个模式了吗?两个文件的名称都与模块名称匹配:godan。

接下来,我们编辑两个文件并添加包名称。

godan.go package godan

godan_test.go

package

 godan_test

等等!为什么是godan_test?为什么不是godan?名称表明测试godan_test.go将导入godan包。这意味着我们将专注于测试导出的函数、构成包 API 的函数以及描述包行为!

好的,让我们检查一下目前为止我们拥有什么。tree 命令显示我们的模块结构。

tree

.

├── go.mod

├── godan.go

└── godan_test.go

1 directory, 3 files

有一个目录(Go 模块)和三个文件。我们还需要其他东西吗?不,什么都没有!这就是我们开始使用测试设计行为所需的全部内容。我们可以专注于添加功能!我们可以扩展 Go 模块,一个接一个地进行测试,一个接一个地实现功能。

是的,应用KISS和YAGNI原则!

添加 CLI

当我们决定将 CLI 添加到不断增长的库中时,我们该怎么做?啊哈!现在是创建第一个目录的时候了。让我们将其命名为cmd。

mkdir cmd

main.go 我们在cmd目录中创建该文件。

tree

.

├── cmd

│  └── main.go

├── go.mod

├── godan.go

└── godan_test.go

2 directories, 4 files

什么是main.go?它是我们 Go 应用程序的主入口!main.go导入包godan。理想情况下,函数的唯一职责main是调用godan包中的一些导出函数。例如:godan.RunCLI或godan.Main或类似的东西。

cmd/main.go

package main

import "github.com/qba73/godan"

func main () {

// Call your app entry point here.

}

这就是我们开发godan包所需的全部内容。

如果我们需要 CLI(命令行界面),则cmd目录main中的函数main.go就可以完成这项工作。

所有设计决策都始于包装,也终于包装。
–B·肯尼迪

我们不需要花哨的生成器。但需要一种有机的设计方法。

以下是 Go 思维方式的关键区别:

1、保持简单

2、注重可读性

3、让事情变得容易理解

将设计决策推迟到合适的时机——当您看到哪些功能可以成为单独的包、文件等的良好候选者时。这可能要等很长时间,也可能永远不会发生。

构建 Go 应用程序就像培育一个花园。

我们从一两朵小花开始。下周,你可以再添加几朵。随着它们生长和开花,将它们摆放在架子上。你不必从建造温室、架子、浇水基础设施和通风系统开始。你可以稍后再添加它们,只要你需要~


作者:场长

评论