好吧,我有一个提供库(导出一些funcs)的项目,还必须提供一个命令行界面(必须有一个可执行文件).
目录结构示例:
whatever.io/
myproject/
main.go
myproject.go
Run Code Online (Sandbox Code Playgroud)
go编译器需要包main和func main来开始执行.我的库需要包myproject,我把东西放在上面.当我构建另一个试图导入myproject的项目时,这就是go工具所说的:
main.go:5:2: found packages myproject (myproject.go) and main (main.go) in $GOPATH/src/whatever.io/myproject
Run Code Online (Sandbox Code Playgroud)
所以我相信没有办法做到这一点.
我应该将库或CLI移动到另一个包吗?
Lar*_*tle 19
只需将您的包移到main.go的同一目录下的新文件夹中即可.请记住从$ GOPATH的引用中导入新包.
例:
user@user:~/p/go/test/so-multipack$ ls -R
.:
a main.go
./a:
a.go
user@user:~/p/go/test/so-multipack$ cat main.go
package main
import (
"../so-multipack/a"
)
func main(){
a.Hello()
}
user@user:~/p/go/test/so-multipack$ cat a/a.go
package a
import (
"fmt"
)
func Hello(){
fmt.Println("hello from a")
}
user@user:~/p/go/test/so-multipack$ go run main.go
hello from a
user@user:~/p/go/test/so-multipack$ go build
user@user:~/p/go/test/so-multipack$ ls
a main.go so-multipack
user@user:~/p/go/test/so-multipack$
Run Code Online (Sandbox Code Playgroud)
有用的链接:
Aka*_*all 16
每个目录不能有两个包,因此错误.所以解决方案@Larry Battle说要把你myproject.go的目录转移到一个新目录.
Go代码必须保存在工作区内.工作空间是一个目录层次结构,其根目录有三个目录:
src包含组织成包的Go源文件(每个目录一个包),
pkg包含包对象,和
bin包含可执行命令.
一个目录中不能有两个 golang 文件和两个包。所以你需要main.go搬出myproject。
移动前的目录结构
whatever.io/
go.mod
myproject/
main.go
myproject.go
Run Code Online (Sandbox Code Playgroud)
搬家后
whatever.io/
go.mod
main.go
myproject/
myproject.go
Run Code Online (Sandbox Code Playgroud)
并且您需要更改您的main.go导入路径。如果模块名称是aaa
前
import "aaa"
Run Code Online (Sandbox Code Playgroud)
需要对此进行更改
import "aaa/myproject"
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,没有。但是,单元测试有一个例外。
这是1 个目录 ( )中的 2 个不同的包 (mypackage和)。编译器不会抱怨这个。mypackage_testmypackage
mypackage 文件夹:
mypackage/
foo.go
foo_test.go
Run Code Online (Sandbox Code Playgroud)
mypackage/foo.go:
package mypackage
func Add(a int, b int) int {
return a + b
}
Run Code Online (Sandbox Code Playgroud)
mypackage/foo_test.go:
package mypackage_test
// Unit tests...
Run Code Online (Sandbox Code Playgroud)
这两个包必须具有以下名称:
_test._test包中文件的名称必须以_test.go
如果您收到与 类似的令人困惑的编译器错误found packages "foo" and "bar",则您可能违反了这些规则中的一个或多个。
| 归档时间: |
|
| 查看次数: |
29031 次 |
| 最近记录: |