首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么/tmp/go-build644681611/command-line-arguments/_obj/exe被传入要运行?

为什么/tmp/go-build644681611/command-line-arguments/_obj/exe被传入要运行?
EN

Stack Overflow用户
提问于 2013-06-09 21:25:15
回答 1查看 2.5K关注 0票数 3

我在玩和学习beego的框架,但是我的hello world示例没有运行,根据我的判断,beego是一个基于os.Args的chdir,程序在那里运行。这就是为什么应用程序运行,但找不到视图目录。

因此,回溯到一个更简单的级别,文件名'example.go':

代码语言:javascript
复制
package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println(os.Getwd())
    fmt.Println(os.Args[0])
}

将产出:

代码语言:javascript
复制
/<directory 'go run this_file.go' was run in>/ <nil>
/tmp/go-build178877254/command-line-arguments/_obj/exe/example

我不太明白为什么会这样。我的第一个想法是我正在使用gvm (go版本管理器),这是因为有什么问题发生了。任何帮助都很感激。

编辑:

显然,

  1. 去建造
  2. ./例子

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

代码语言:javascript
复制
 <directory './example' was run in>/ <nil>
 <directory './example' was run in>/
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-10 09:00:08

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

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

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

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

https://stackoverflow.com/questions/17014329

复制
相关文章

相似问题

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