我正在玩和学习用于 go 的 beego 框架,但我的 hello world 示例没有运行,据我确定,beego 执行了一个基于 os.Args[0] 的 chdir,并且该程序在那里运行.这就是应用程序运行但找不到 View 目录的原因。
所以回溯到更简单的级别,文件名'example.go':
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.Getwd())
fmt.Println(os.Args[0])
}
将输出:
/<directory 'go run this_file.go' was run in>/ <nil>
/tmp/go-build178877254/command-line-arguments/_obj/exe/example
我对 go 的理解还不够,为什么会这样。我的第一个想法是我正在使用 gvm (go version manager) 并且这是因为某些东西关闭了。任何帮助表示赞赏。
编辑:
显然,
开始构建
./例子
产生更好的、预期的和成功的结果:
<directory './example' was run in>/ <nil>
<directory './example' was run in>/
最佳答案
go run
会将您的源代码编译 ( go build
) 到系统 TEMP
或 TMP
环境变量中,然后从那里执行文件。它不是真正为生产代码的运行而设计的,因为编译和执行显然比仅仅执行需要更长的时间。
通常的做法是使用go run
进行开发,然后使用go build
分发二进制文件。 go run
确实方便了开发者在一条命令中快速测试代码。它确实在多个不同系统之间运行可移植源代码方面有一些有用的好处,但是,如果您要将代码部署到所有这些系统,包含 通常是正常的go build
在部署中。查看the full guide to the Go command
为了让事情更简单,很可能只是cross-compile将代码转到一台机器上的多个目标架构,然后将二进制文件部署到相关机器上。这意味着目标系统甚至不需要安装 Go。除了上面的链接,您还可以查看 goxc它提供了一种更简单的方式,单行交叉编译工具。
关于go - 为什么传入/tmp/go-build644681611/command-line-arguments/_obj/exe去运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17014329/