首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >go构建与go build file.go

go构建与go build file.go
EN

Stack Overflow用户
提问于 2013-10-07 20:48:40
回答 1查看 6.6K关注 0票数 6

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

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

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

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

发布于 2013-10-08 05:55:08

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

go build file.go (即使file.goGOPATH中)并不是在工作空间中构建包,所以它不遵循这个规则。缺点是您必须命名所有的*.go文件,您不能获得go命令的一些自动行为(例如:测试和安装),而且您不能构建一个包(需要安装),只能构建可执行文件。而且,这是不可能的。 "go build file.go“应该只用于您不打算分发或重用代码的一个简单的源文件二进制文件。即使如此,遵循go工具的约定通常更简单、更快:每个文件夹一个包(反之亦然)没有相对导入(永远) "go run file.go“遵循相同的逻辑,甚至更不推荐。 这两种模式都用于非常特定的用途,并且应该在常规程序和包中避免使用。 By:Carlos Castillo

因此,Google强制执行包在环境变量GOROOTGOPATH中相对于GOROOT目录的导入路径。

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

注意:GOPATH设置为C:\gopath

main.go改为

代码语言:javascript
运行
复制
package main

import _ "./local_file"

func main() {
}

到这个

代码语言:javascript
运行
复制
package main

import _ "bug/local_file"

func main() {
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19234445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档