【问题标题】:Difference between go run ./path/dir and go run path/dirgo run ./path/dir 和 go run path/dir 的区别
【发布时间】:2019-11-11 06:50:29
【问题描述】:

注意:这不是在问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 无效?

【问题讨论】:

    标签: go


    【解决方案1】:

    当您运行./cmd/web 时,您指的是当前目录树中的正确目录。

    cmd/web 然而,指的是一个存在于 stdlib 包所在的包。如果你尝试运行这个例子

    go run net/http
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-04
      • 2015-05-07
      • 2015-01-05
      • 2016-07-31
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      相关资源
      最近更新 更多