为什么我不能在 golang 中向我的库添加主?



我在完成一件应该很容易的任务时遇到了麻烦。我了解GitHub模型的代码组织(即库的repo和应用程序的repo,消耗的库)。我觉得这太棒了。但是我发现我经常希望mylib与一个简单的可执行文件捆绑在一个main.go文件中。main.go应为package main,并导入mylib。换句话说,它应该是一个关于如何构建一个使用这个库的应用程序的确切文档。

我的观点是,因为提供一个简单的命令行接口来包装你的库通常是足够方便的,所以应该有一种简单的方法来做到这一点,而不必制作另一个repo,而golang应该会有所帮助。

我想要以下内容:

$GOPATH/src/github.com/me/mylib
    mylib.go
    mylib_also.go
    main.go

其中mylib是库(package mylib), main.gopackage main,运行go install生成bin/mylibpkg/mylib.a

main.go应该导入"github.com/me/mylib"(如果我现在这样做,我得到循环导入错误)或go会理解发生了什么,因为这个功能应该是内置的,而一个main.go在repo中生成exec。可能需要导入(并去掉循环错误)是更好的方法。

现在,我必须做

$GOPATH/src/github.com/me/mylib
    mylib/
        mylib.go
    main.go

所以我必须导入github.com/me/mylib/mylib,这是荒谬的

总而言之,go install应该允许包和main的特殊情况,main导入包并提供一个简单的cli来演示包的API。GitHub模型支持两个仓库,但在一个仓库中完成简单的命令应该很容易!

每个文件夹不能有多个包。Go在包级操作,而不是文件级。

在这种情况下,使用库的二进制文件的约定是使用包main创建一个cmd文件夹-即按照https://github.com/bradfitz/camlistore/tree/master/cmd或https://github.com/boltdb/bolt

在你的例子中,这将是:

$GOPATH/src/github.com/me/mylib
    mylib/
      mylib.go
      README.md
      cmd/
        your-lib-tool/
          main.go

如果你只是想要一个方便的小包装器,只是一些命令行接口到你的库用于演示目的,如果主程序不是建立在go get上(而不是在简单的go buildgo install期间),但你可以通过go run main.go运行它或手动构建它,例如与6g:只需使用构建标签(参见http://golang.org/pkg/go/build/#hdr-Build_Constraints) main.go:

// +build ignore

相关内容

  • 没有找到相关文章

最新更新