【问题标题】:Structuring a multi-executable Go project构建一个多可执行的 Go 项目
【发布时间】:2018-10-29 06:30:20
【问题描述】:

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

【问题讨论】:

  • 传递完全限定的导入路径(以模块名称开头)或./lambda/account_create(注意前导./)。
  • @Peter 它不再抱怨,但没有生成可执行文件。
  • 为什么要投反对票?我真的在努力为这样的项目找到一个好的结构,我相信其他人也会感兴趣。
  • 开发与 Golang 共享公共代码部分的多模块项目并不容易,我收到了来自我的 Maven golang 包装工具的用户的一些请求(Maven 提供了构建多模块应用程序的好方法)和我已经做了一些 Maven 多模块 Golang 项目的例子,如果你想尝试这种方法,只需安装 Maven 并从 github.com/raydac/mvn-golang-example 中编写的architype 构建项目骨架@

标签: go aws-lambda structure microservices go-modules


【解决方案1】:

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

go build ./lambda/account_create

注意./go build 接受包名或路径。如果您未在路径前添加 ./,则假定您为其提供了包名称。

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

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

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

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

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

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

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

【讨论】:

  • 感谢您的回答!我回复了彼得对这个问题的评论,说该命令确实没有返回任何错误,但似乎没有创建可执行文件。
  • 是的。它会生成一个没有附加“x”权限的可执行文件(这是第一个奇怪的事情),如果我附加该权限,它会在运行时给出一个奇怪的错误。
  • 你有main函数吗,在main包里吗?
  • 我们指的是哪个主包?根中的那个还是lambda/account_create中的那个?
  • lambda/account_create 中的 main.go
猜你喜欢
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 2015-10-08
  • 1970-01-01
相关资源
最近更新 更多