注意:这不是在问Why the functions defined in other "main" packages are not recognised?。
我有一个具有以下结构的项目:
go / src / github.com / me / project / cmd / web / main.go
# main.go
package main
import(
"github.com/me/myproject/internal/myproject"
)
void main() {
// ...
}
go / src / github.com / me / project / cmd / web / handlers.go
# handlers.go
package main
void someFunc() {
// ...
}
然后我编译并成功运行:
go run ./cmd/web
我也可以使用go run cmd/web/*.go
但是,当我尝试使用go run cmd/web
运行时,为什么编译失败并显示以下输出:
package cmd/web: package cmd/web is not in GOROOT (/usr/local/go/src/cmd/web)
为什么./cmd/web
起作用,但是cmd/web
不起作用?
答案 0 :(得分:1)
运行./cmd/web
时,将引用当前目录树中的正确目录。
cmd/web
指的是stdlib软件包所在的软件包。如果您尝试运行此示例
go run net/http
它将告诉您它无法运行,因为它不是main
软件包。它找到了具有该名称的stdlib net/http
软件包;但由于cmd/web
不存在,因此无法正常工作