go - go run ./path/dir和go run path/dir之间的区别

标签 go

注意:这不是询问Why the functions defined in other "main" packages are not recognised?

我有一个具有以下结构的项目:

转到/src/github.com/me/project/cmd/web/main.go

# main.go
package main

import(
  "github.com/me/myproject/internal/myproject"
)

void main() {
  // ...
}

转到/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不起作用?

最佳答案

运行./cmd/web时,您在当前目录树中引用了正确的目录。
cmd/web指的是stdlib软件包所在的软件包。如果您尝试运行此示例

go run net/http

它会告诉您它无法运行,因为它不是main软件包。它找到了具有该名称的stdlib net/http软件包;但是由于cmd/web不存在,所以它不起作用

关于go - go run ./path/dir和go run path/dir之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58796736/

相关文章:

go - 我的 bcrypt 密码验证总是失败,说 hashedPassword 不是给定 passwordPASS 的散列

json - easyjson 将数组解码为 go 结构

go - 我不确定为什么索引超出范围错误

google-app-engine - 预期的声明,找到 'IDENT' 项

amazon-web-services - 突发数据处理的最佳 EC2 实例

multithreading - 在 Go 中关闭自馈 channel

bash - 用-ldflags传递给Go编译器的字符串中的Shell变量不会扩展

mongodb - 无法连接到 Ubuntu 上 Golang 中的 Mongo Cloud mongodb 数据库

go - 为什么 goroutine 没有身份

json - 使用 "embedded"键将 JSON 解码为结构