构建一个多可执行的Go项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建一个多可执行的Go项目相关的知识,希望对你有一定的参考价值。

我正在尝试在Go中构建一个微服务架构项目。我目前正在使用支持模块的Go 1.11,因此我将我的根目录放在GOPATH之外的任意选择目录中。

如果我正确地获得微服务架构概念,虽然我的微服务需要独立,但它们可以共享依赖关系(我没有看到另一种方法来做事,是吗?)

以下是我的目录结构:

.
├── go.mod
├── lambda
│   └── account_create
│       └── main.go
├── readme.md
└── types
    ├── account.go
    ├── location.go
    ├── order.go
    ├── pricing.go
    ├── product.go
    └── types.go

现在我期望的行为是能够运行go build lambda/account_create并获得具有该功能的可执行文件,以便我可以将其提供给相应的AWS Lambda函数。

但是,当我运行命令时,我得到:

can't load package: package lambda/account_create: unknown import path "lambda/account_create": cannot find module providing package lambda/account_create

请解释一下为什么这不起作用,并就这样的项目应如何看待给我一些建议。

非常感谢你!

编辑这是我的lambda/account_create/main.go文件内容:

package account_create

import (
    "fmt"
    "roasted.ro/pkg/types"
)

func main() {
    account := types.UserAccount{Name: "Victor"}
    fmt.Printf("Welcome %s", account.Name)
}
答案

要回答问题的后半部分(因为前半部分更多是关于偏好),您需要做:

go build ./lambda/account_create

注意./go build接受包名或路径。如果你没有在./前面添加路径,那么它假定你给它一个包名。

编辑:如果你想要一个可执行文件,包必须是main。根据docs,你总是必须使用package main来构建可执行文件的项目:

可执行命令必须始终使用package main

编辑:我会在布局上添加一些意见:

考虑将项目的哪些部分导出到其他项目。这意味着有人可以导入您的包并期望获得价值,并且当您的更改时不会让代码中断。

这应该是在github.com/you/pkg/somepath包或只是github.com/you/somepath

除了主要包之外的任何其他东西都应该在/internal包下。

我通常为每个可执行文件制作一个/cmd/myexecurable1 /cmd/myexecurable2等等。

以上是关于构建一个多可执行的Go项目的主要内容,如果未能解决你的问题,请参考以下文章

Go构建工程入门

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

使用 Go 和 ReactJS 构建聊天系统(前言)

go项目新增一个代码文件

go环境变量配置 (GOROOT和GOPATH)

使用 Go 和 ReactJS 构建聊天系统:初始化项目