为了账号安全,请及时绑定邮箱和手机立即绑定

如何解决 Go 项目中嵌套应用程序二进制文件中的依赖项?

如何解决 Go 项目中嵌套应用程序二进制文件中的依赖项?

Go
当年话下 2023-06-05 19:25:51
这听起来很愚蠢,但我正在尝试构建我的新 golang 项目一段时间,但我遇到了以下错误无法加载包:包 github.com/kuskmen/yamq/cmd/yamq-client:在 C:\projects\yamq\cmd\yamq- 中找到包 main (main.go) 和 yamqclient (yamq-client.go)客户我知道这应该很容易修复,但我来自 .NET,但我在 Go 项目及其依赖项解析模型方面仍然没有经验,因此很费劲。我的项目结构看起来像这样/yamq    /cmd        /yamq-client          // yamq client application binary            main.go           // package main            yamq-client.go    // package yamqclient        /yamq-server          // yamq server application binary            main.go           // package main            yamq-server.go    // package yamqserver    go.mod                // contains only "module github.com/kuskmen/yamq" for now    ... // some library files that will probably be moved to /shared folder到目前为止一切顺利,当我go build在最外层目录 ( /yamq ) 中执行操作时,它正在成功构建(或者至少没有显示任何错误),但是当我尝试构建二进制yamq-client文件时yamq-server,我每次尝试都会遇到上述错误用谷歌搜索或找到有用的东西,我得到了一些旧文章或答案,可以追溯到 2013-2016 年,它提出了一些关于$GOPATH等等的事情,因为我正在尝试使用 go 模块,所以这里不应该是这种情况。
查看完整描述

2 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

根据:

  • Go 程序员通常将所有 Go 代码保存在一个工作区中。

  • 工作区包含许多版本控制存储库(例如,由 Git 管理)。

  • 每个存储库包含一个或多个包。

  • 每个包在一个目录中包含一个或多个 Go 源文件。

  • 包目录的路径决定了它的导入路径。


查看完整回答
反对 回复 2023-06-05
?
智慧大石

TA贡献1946条经验 获得超3个赞

对于您的项目,我会做这样的事情:


$ tree

.

├── clientlib

│   └── lib.go

├── cmd

│   ├── client

│   │   └── main.go

│   └── server

│       └── main.go

├── go.mod

└── serverlib

    └── lib.go


5 directories, 5 files


$ cat go.mod

module myproject.com

模块名称是任意的(可以是github.com/yourname/yourproject)。


对于服务器端:


$ cat serverlib/lib.go 

package serverlib


import "fmt"


func Hello() {

    fmt.Println("Hello from serverlib.Hello")

}


$ cat cmd/server/main.go 

package main


import (

    "fmt"


    "myproject.com/serverlib"

)


func main() {

    fmt.Println("Running server")

    serverlib.Hello()

}

现在我们可以构建并运行它了:


$ go build -o server cmd/server/main.go 

$ ./server

Running server

Hello from serverlib.Hello

客户端看起来是对称的。


变体:你可以用它们的实际二进制名称命名.go文件- 比如和. 每个包中的包仍然是,但随后无需显式创建具有文件名(没有 )的可执行文件。cmd/...server.goclient.gomaingo build.go-o


查看完整回答
反对 回复 2023-06-05
  • 2 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信