go build vs go build file.go

时间:2013-10-07 20:48:41

标签: compiler-construction build go

go buildgo build file.go之间有什么区别?

我问,因为当我在导入本地包的包上运行go build时,我收到此错误消息。

can't load package: C:\go\src\bug\main.go:3:8: local import "./local_file" in non-local package

但是,当我指定文件名时,它可以工作。前go build main.go

Windows XP上的控制台历史记录。

C:\gopath\src\bug:>go version
go version go1.1 windows/386
C:\gopath\src\bug:>dir
...
<DIR>          local_file
                55 main.go
...

C:\gopath\src\bug:>type main.go
package main

import _ "./local_file"

func main() {
}

C:\gopath\src\bug:>type local_file\local_file.go
package local_file

import "fmt"

func init() {
        fmt.Println("Called: local_file.init()")
}

C:\gopath\src\bug:>go run main.go
Called: local_file.init()

C:\gopath\src\bug:>go build main.go

C:\gopath\src\bug:>dir
...
<DIR>          local_file
         1,285,120 main.exe
                55 main.go  
...

C:\gopath\src\bug:>go build
can't load package: C:\gopath\src\bug\main.go:3:8: local import "./local_file" in non-local package

1 个答案:

答案 0 :(得分:6)

我在google网站上为golang提出了这个问题,这是其中一个回复。

  

go build file.go(即使file.go中有GOPATH)并非构建   在工作区中打包,因此它不遵循该规则。该   缺点是你必须命名所有*.go个文件,你不会得到   go命令的一些自动行为(例如:testing&amp; amp;   安装),你不能建立一个包(需要   安装),只有可执行文件。而且,它不是可以获得的。

     

&#34; go build file.go&#34;应该只用于简单的一个来源   您不打算分发或重复使用代码的文件二进制文件   从。即便如此,遵循go工具通常更简单,更快捷   约定:每个文件夹一个包(反之亦然)没有亲戚   进口(永远)&#34; go run file.go&#34;遵循相同的逻辑,甚至是   少推荐。

     

这两种模式都是针对特定用途的,应该避免使用   在常规课程和套餐中。

     

通过:Carlos Castillo

因此,事实证明Google Go强制将包的导入路径相对于环境变量srcGOROOT中的GOPATH目录。

因此,这是使用go build构建程序的修复方法。

注意:GOPATH设置为C:\gopath

更改main.go
package main

import _ "./local_file"

func main() {
}

到此

package main

import _ "bug/local_file"

func main() {
}