go build vs go build file.go



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

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

can't load package: C:gosrcbugmain.go:3:8: local import "./local_file" in non-local package

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

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

C:gopathsrcbug:>go version
go version go1.1 windows/386
C:gopathsrcbug:>dir
...
<DIR>          local_file
                55 main.go
...
C:gopathsrcbug:>type main.go
package main
import _ "./local_file"
func main() {
}
C:gopathsrcbug:>type local_filelocal_file.go
package local_file
import "fmt"
func init() {
        fmt.Println("Called: local_file.init()")
}
C:gopathsrcbug:>go run main.go
Called: local_file.init()
C:gopathsrcbug:>go build main.go
C:gopathsrcbug:>dir
...
<DIR>          local_file
         1,285,120 main.exe
                55 main.go  
...
C:gopathsrcbug:>go build
can't load package: C:gopathsrcbugmain.go:3:8: local import "./local_file" in non-local package

我在谷歌集团网站上问了这个问题,这是回答之一。

go build file.go(即使file.goGOPATH(也没有构建 工作区中的包,因此它遵循不遵循该规则。这 缺点是你必须命名所有*.go文件,你没有得到 go命令的一些自动行为(例如:测试和 安装(,并且您无法构建包(这需要 安装(,仅可执行文件。此外,它不是可以得到的。

"go build file.go"只能用于简单的一个来源 文件不打算分发或重用代码的二进制文件 从。即便如此,遵循go工具通常更简单,更快捷 约定:每个文件夹一个包(反之亦然(无相对 导入(曾经("go run file.go"遵循相同的逻辑,并且是偶数 不太推荐。

这两种模式都用于非常特定的用途,应避免使用 在常规程序和包中。

作者:卡洛斯·卡斯蒂略

所以事实证明,Google Go 强制包的导入路径相对于环境变量 GOROOTGOPATH 中的src目录。

因此,这是使程序构建的修复程序 go build .

注意:GOPATH设置为C:gopath

main.go

package main
import _ "./local_file"
func main() {
}

对此

package main
import _ "bug/local_file"
func main() {
}

最新更新