Compiler construction go build vs go build file.go

Compiler construction go build vs go build file.go,compiler-construction,build,go,Compiler Construction,Build,Go,go build和go build file.go之间有什么区别 我这样问是因为当我在导入本地包的包上运行go build时,会收到此错误消息 无法加载非本地包中的包:C:\go\src\bug\main.go:3:8:本地导入“/local\u file” 但是,当我指定一个文件名时,它可以工作。Exgo build main.go Windows XP上的控制台历史记录 C:\gopath\src\bug:>go version go version go1.1 windows/386

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

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

无法加载非本地包中的包:C:\go\src\bug\main.go:3:8:本地导入“/local\u file”

但是,当我指定一个文件名时,它可以工作。Ex
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
C:\gopath\src\bug:>go版本
go版本go1.1 windows/386
C:\gopath\src\bug:>dir
...
本地文件
55美茵河畔
...
C:\gopath\src\bug:>键入main.go
包干管
导入“../local文件”
func main(){
}
C:\gopath\src\bug:>键入local\u file\local\u file.go
包本地文件
输入“fmt”
func init(){
Println(“调用:local_file.init()”)
}
C:\gopath\src\bug:>go运行main.go
调用:local_file.init()
C:\gopath\src\bug:>go build main.go
C:\gopath\src\bug:>dir
...
本地文件
1285120 main.exe
55美茵河畔
...
C:\gopath\src\bug:>go build
无法加载包:C:\gopath\src\bug\main.go:3:8:本地导入非本地包中的“/local\u file”

我在谷歌集团网站上为golang提出了这个问题,下面是一个回答

go build file.go
(即使
file.go
GOPATH
中)没有生成 包在工作区中,因此它不遵循该规则。这个 缺点是你必须命名所有的
*。去
文件,你不会得到
go
命令的一些自动行为(例如:测试& 安装),您无法生成包(需要 安装),仅可执行文件。而且,它不是可以获得的

go build file.go
”只能用于简单的一个源代码 不打算分发或重复使用代码的文件二进制文件 从…起即使如此,遵循go工具的操作通常更简单、更快 约定:每个文件夹一个包(反之亦然)没有相对的 导入(ever)“
go run file.go
”遵循相同的逻辑,并且是偶数 不太推荐

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

作者:

因此,Google Go强制程序包的导入路径与环境变量
GOROOT
GOPATH
中的
src
目录相对

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

注意:
GOPATH
设置为
C:\GOPATH

更改
main.go
from

package main

import _ "./local_file"

func main() {
}
对此

package main

import _ "bug/local_file"

func main() {
}

应该将包本地_文件安装到哪里?但是为什么需要安装包本地_文件来创建可执行文件?编译器不应该在本地引用它吗?