我正试图在Go中制作一个简单的计算器。我正在设计它,我可以先构建一个命令行界面,然后在GUI界面中轻松交换。项目位置为$GOPATH/src/gocalc
(此后所有路径均相对于项目位置)。命令行界面逻辑存储在文件gocalc.go
中。计算器逻辑存储在文件calcfns/calcfns.go
和operations/operations.go
中。除gocalc.go
package main
外,所有文件的包名都与其文件名相同(无扩展名)
calcfns.go
通过operations.go
导入import "gocalc/operations"
; gocalc.go
通过calcfns.go
import "gocalc/calcfns"
总结:
$GOPATH/src/gocalc/
gocalc.go
package main
import "gocalc/calcfns"
calcfns/
calcfns.go
package calcfns
import "gocalc/operations"
operations/
operations.go
package operations
当我尝试go build operations
(来自项目目录)时,我收到回复:can't load package: package operations: import "operations": cannot find package
当我尝试go build gocalc/operations
时,我得到can't load package: package gocalc/operations: import "gocalc/operations": cannot find package
当我尝试go build operations/operations.go
时,它编译得很好
当我尝试go build calcfns
或go build gocalc/calcfns
时,我会收到can't load package...
条消息,类似于操作中的消息;但是,当我尝试构建calcfns/calcfns.go
时,它会对import语句产生阻塞:import "gocalc/operations": cannot find package
最后,当我从项目目录中尝试go build .
时,它会与上一段相似:import "gocalc/calcfns": cannot find package
我应该如何构建我的子包和/或导入语句,使go build
不会失败?
答案 0 :(得分:7)
愚蠢的是,我忘了导出我的GOPATH变量,因此go env
为""
显示了GOPATH
。 (感谢jnml建议打印go env
; +1)。
执行此操作(并将主程序移动到其自己的文件夹{project-dir}/gocalc/gocalc.go
)后,我可以通过go install gocalc/gocalc
构建/安装程序。
故事的道德,确保在设置$ GOPATH环境变量时键入export GOPATH=...
而不是GOPATH=...
答案 1 :(得分:1)
请尝试添加$ go env
的输出以提供更多线索。否则,目录结构和(显示的)import语句看起来都没问题。
然而句子
当我尝试去构建操作时(从项目目录开始),我得到了响应:无法加载包:包操作:导入“操作”:找不到包
听起来很奇怪。似乎暗示你有
package operations
import "operations"
在'operations.go'中的,那将是罪魁祸首......?
答案 2 :(得分:-1)