我试图在Go中制作一个简单的计算器。我在设计它时可以先构建一个命令行界面,然后轻松地在GUI界面中进行交换。项目位置为$GOPATH/src/gocalc(此后所有路径均相对于项目位置)。命令行界面逻辑存储在文件gocalc.go中。计算器逻辑存储在文件calcfns/calcfns.gooperations/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 calcfnsgo 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来构建/安装该程序。

    故事的寓意,请确保在设置$ GOPATH环境变量时输入export GOPATH=...而不是GOPATH=...

    08-19 15:40