在同一个目录中有两个包有意义吗?

我有一个项目,它提供了一个库(导出一些函数)并且还必须提供一个命令行界面(必须有一个可执行文件)。


目录结构示例:


whatever.io/

    myproject/

        main.go

        myproject.go

go 编译器需要包 main和func main才能开始执行。我的图书馆需要myproject 包,我在上面放东西。这是 go 工具在我构建另一个尝试导入 myproject 的项目时所说的:


main.go:5:2: found packages myproject (myproject.go) and main (main.go) in $GOPATH/src/whatever.io/myproject

所以我相信没有办法做到这一点。


我应该将库或 CLI 移动到另一个包吗?


翻过高山走不出你
浏览 251回答 3
3回答

猛跑小猪

只需将您的包移动到 main.go 相同目录中的一个新文件夹中。请记住从 $GOPATH 的引用中导入新包。例子:user@user:~/p/go/test/so-multipack$ ls -R.:a  main.go./a:a.gouser@user:~/p/go/test/so-multipack$ cat main.go package mainimport (    "../so-multipack/a")func main(){    a.Hello()}user@user:~/p/go/test/so-multipack$ cat a/a.go package aimport (    "fmt")func Hello(){    fmt.Println("hello from a")}user@user:~/p/go/test/so-multipack$ go run main.go hello from auser@user:~/p/go/test/so-multipack$ go build user@user:~/p/go/test/so-multipack$ lsa  main.go  so-multipackuser@user:~/p/go/test/so-multipack$ 

叮当猫咪

每个目录不能有两个包,因此会出现错误。所以@Larry Battle 所说的解决方案将您移动myproject.go到一个新目录。从如何编写 go 代码Go 代码必须保存在工作区中。工作区是一个目录层次结构,其根目录包含三个目录:src 包含组织成包的 Go 源文件(每个目录一个包),pkg 包含包对象,以及bin 包含可执行命令。

胡说叔叔

在大多数情况下,没有。但是,单元测试有一个例外。工作示例:这是1 个目录 ( )中的 2 个不同的包 (mypackage和)。编译器不会抱怨这个。mypackage_testmypackagemypackage 文件夹:mypackage/  foo.go  foo_test.gomypackage/foo.go:package mypackagefunc Add(a int, b int) int {    return a + b}mypackage/foo_test.go:package mypackage_test// Unit tests...规则:这两个包必须具有以下名称:目录名称。NameOfDirectory + _test._test包中文件的名称必须以_test.go如果您收到与 类似的令人困惑的编译器错误found packages "foo" and "bar",则您可能违反了这些规则中的一个或多个。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go