如何构建一个没有主目录的GO库[已关闭]

jum4pzuy  于 2023-08-01  发布在  Go
关注(0)|答案(2)|浏览(104)

**已关闭。**此问题为not reproducible or was caused by typos。它目前不接受回答。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
22天前关闭
Improve this question
我是一个经验丰富的开发人员,但新去。我找到的文档并不简单。我已经习惯了Java、Scala和Python,但GO对我来说是新的。我正在尝试在GO中创建一个库,并且我正在创建项目结构的第一步。当我运行go build时,它告诉我“在...中没有GO文件”。这是一个纯库,我不想要一个主文件。有没有一种方法可以实现这一点,或者无论如何都需要一个主文件?
查找文档并查看示例项目。编辑。我确实有文件,我已经运行了一些测试与一个主文件到位。但是一旦我删除了主文件,我就有点不知道如何正确地构建它了。

nwlls2ji

nwlls2ji1#

这取决于你对“图书馆”的定义。如果你指的是一个预编译的二进制对象,比如C中的.a.so库,那么Go实际上并没有这样的东西。依赖包作为源代码下载,然后编译成二进制文件。
如果你的意思是“一个我可以导入并在其他项目中使用的模块”……你有没有看过其他模块是如何结构化的?以yaml模块为例,我们可以看到:

  • 没有main.go
  • 如果您克隆它并运行go mod tidy; go build,则go build命令将正常运行。

例如,我可以创建一个具有以下结构的模块mymodule-dep

.
├── functions.go
└── go.mod

字符串
其中go.mod具有:

module github.com/larsks/mymodule-dep

go 1.20


functions.go有:

package mymodule_dep

import "strings"

func Replace(s string) string {
    return strings.Replace(s, "Hello", "Goodbye", -1)
}


我可以通过导入到另一个项目来使用该模块,如下所示:

package main

import (
    "fmt"
    dep "github.com/larsks/mymodule-dep"
)

func main() {
    fmt.Println(dep.Replace("Hello, world!"))
}


这里假设存在一个存储库https://github.com/larsks/mymodule-dep(现在确实存在)。
如果我构建了上面的代码,运行它会产生:

Goodbye, world!

oxf4rvwz

oxf4rvwz2#

通常您不需要构建GO库。
您可以将库创建为GO文件,测试它并将源代码发布到GitHub。发布的代码在Git(通常是GitHub)中有版本,客户端可以选择使用哪个版本的库。
使用该库的客户端应用程序有一个main.go文件,您可以在该文件中运行go build命令。
Go没有像Java或.NET这样的中间格式,也不使用二进制可执行格式的库。相反,GO以GO代码的形式使用依赖项。这类似于Node和Python,除了Go编译最终代码而不解释它。

相关问题