我是一名产品工程师,与多个初创公司和技术爱好者合作,为他们构建技术。我和我的团队将Python(Flask)作为后端的首选技术栈,因为它易于用于快速应用程序开发,但是当你需要处理大量数据时,服务会受到影响。Python在小型应用程序中的表现更好,但是对于大规模数据,你总是需要引入一些中间件来加快数据传输速度。
我们决定转向另一种优化并且生成结果更快的语言。这总是一个非常困难的决定,特别是当你的团队大部分人对新技术不熟悉时。我想尝试Go,因为我听说过它的性能基准以及它与Java/C++在速度、优化等方面的相似之处。我倾向于Go的另一个原因是它有很好的生态系统,并且对于GCP、RabbitMQ、Reddis等工具有很好的支持。
当我开始使用Go构建微服务时,我意识到它没有像Python那样强大的社区,我不得不花费很多时间进行试错,以确定框架、ORM层、第三方配置。因此,我决定写一系列关于如何在Go中构建微服务的文章,以便人们不必花费很多时间在这些事情上,可以立即开始构建他们的系统。
技术栈
我选择Go Fiber是因为它的极简主义和与Flask的相似之处。我在其上使用了Beego的ORM层,因为它易于配置,可以轻松创建迁移。
环境设置
在本系列中,我们将构建一个模拟Web服务。在我们的示例中,我们将构建两个微服务:用户(负责认证、维护用户数据)和博客(管理博客、类别作者)。在本部分中,我们将设置我们的基本结构,并编写一个将字符串“Hello World”返回为基本端点。
让我们从创建我们的docker-compose文件并在其中定义我们的微服务开始。
version: '3.8'
services:
web_blog:
container_name: web_blog
build:
context: ./services/web_blog
dockerfile: Dockerfile
ports:
- 3069:3069
这是一个非常简单易懂的compose文件,我们定义了我们的服务,它将监听的端口、它的Dockerfile和上下文。
接下来,我们将创建一个顶级服务文件夹。在其中,我们将根据我们的服务web_blog创建另一个文件夹,在其中我们将创建我们的服务的docker文件。因此,你的目录结构应该如下所示:
现在我们将开始编写我们的Dockerfile
文件。
FROM golang:1.18
RUN apt update && apt upgrade -y &&\
apt install -y git\
make openssh-client
WORKDIR /go/src/app
COPY . ./
RUN go mod tidy \
&& go mod verify
RUN go build -o /main
CMD ["/main"]
我们首先拉取Go 1.18镜像,然后更新二进制文件。之后,我们指定我们的工作目录,并将当前目录的内容复制到工作目录中。接下来,我们安装依赖项,构建我们的二进制文件,最后执行二进制文件。
现在我们需要初始化我们的模块。我们将通过以下命令更改我们的目录到我们的服务文件夹中:
cd services/web_blog
然后运行以下命令:
go mod init github.com/saadfarhan124/microservices_go/web_blog.git;
你可以将你的模块命名为任何你喜欢的名称,但遵循一些约定总是是一个好习惯。我通过将服务名称附加到我的git存储库URL来命名这个服务。
运行此命令将为我们创建一个go.mod文件,该文件将为我们处理所有的依赖项。现在,我们将添加我们的第一个依赖项,即Go Fiber框架。在同一目录中运行以下命令:
go get github.com/gofiber/fiber/v2
添加我们的第一个依赖项将为我们创建一个go.sum文件。
接下来,我们将在服务目录中创建一个main.go文件。你的结构应该如下所示:
现在,我们将开始在我们的main.go文件中键入一些代码。首先,我们将声明我们的包名称并导入我们的依赖项。
package main
import (
"log"
"github.com/gofiber/fiber/v2"
)
接下来一步是编写我们的主函数。
func main() {
app := fiber.New()
app.Get("/hello", func(c *fiber.Ctx) error {
return c.SendString("Hello World")
})
log.Fatal(app.Listen(":3069"))
}
我们首先创建一个fiber对象,然后设置一个简单的get端点,返回字符串“Hello World”。最后,我们使用Listen函数启动服务器,并传递一个端口号。现在让我们通过在终端中运行以下命令来测试我们的端点:
docker-compose up --build
所以,我们成功地创建了一个docker化的微服务。在第2部分中,我们将配置实时重载到我们的服务中,添加模型、迁移等等。
你可以在这里找到源代码。
译自:https://saadfarhan124.medium.com/building-microservices-in-go-part-1-e7e58893bc5e
评论(0)