4

我正在尝试在 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)
}
4

1 回答 1

3

要回答您问题的后半部分(因为前半部分更多的是关于偏好),您需要执行以下操作:

go build ./lambda/account_create

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

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

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

编辑:我将添加一些关于布局的意见:

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

那应该是在一个github.com/you/pkg/somepath包中或只是github.com/you/somepath.

其他任何东西(除了主包)都应该在一个/internal包下。

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

于 2018-10-28T22:02:35.210 回答