web*_*rc2 6 go package-structuring
我想在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.goimport "gocalc/calcfns"
总结一下:
$GOPATH/src/gocalc/
gocalc.go
package mainimport "gocalc/calcfns"calcfns/
calcfns.go
package calcfnsimport "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不会失败的方式导入语句?
愚蠢的是,我忘记导出我的GOPATH变量,所以go env显示""为GOPATH.(感谢jnml建议打印go env; +1).
执行此操作(并将主程序移动到其自己的文件夹{project-dir}/gocalc/gocalc.go)后,我可以通过构建/安装程序go install gocalc/gocalc.
故事的道德,确保您键入export GOPATH=...而不是仅GOPATH=...在设置$ GOPATH环境变量时