2

我正在使用 beego 框架进行游戏和学习,但是我的 hello world 示例没有运行,并且我确定 beego 执行基于 os.Args[0] 的 chdir 并且程序在那里运行。这就是应用程序运行但找不到视图目录的原因。

所以回溯到一个更简单的级别,文件名“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 版本管理器),这是因为有些事情发生了。任何帮助表示赞赏。

编辑:

显然,

  1. 去建造

  2. 。/例子

产生更好的、预期的和成功的结果:

 <directory './example' was run in>/ <nil>
 <directory './example' was run in>/
4

1 回答 1

2

go run会将您的源代码编译(go build)到系统TEMPTMP环境变量中,然后从那里执行文件。它并不是真正为生产代码的运行而设计的,因为编译和执行显然比仅仅执行需要更长的时间。

通常的做法是go run用于开发,然后go build分发二进制文件。go run真的是方便开发者在一个命令中快速测试代码。在多个不同的系统之间运行可移植源代码时,它确实有一些有用的好处,但是,如果您要将代码部署到所有这些系统,通常将其包含go build在部署中。查看Go 命令的完整指南

为了让事情变得更简单,很可能在一台机器上将 Go 代码交叉编译到多个目标架构,然后将二进制文件部署到相关机器上。这意味着目标系统甚至不需要安装 Go。除了上面的链接,您还可以查看goxc,它提供了一种更简单的方式,单行交叉编译工具。

于 2013-06-10T09:00:08.353 回答