go - 为什么传入/tmp/go-build644681611/command-line-arguments/_obj/exe去运行

标签 go

我正在玩和学习用于 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) 并且这是因为某些东西关闭了。任何帮助表示赞赏。

编辑:

显然,

  1. 开始构建

  2. ./例子

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

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

最佳答案

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

通常的做法是使用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/

相关文章:

go - 如何使用 bson.SetBSON 或 bson.Raw?

go - 由于运行状况检查超时,BlueMix 未启动

Mysql自增Id在使用prepared statements时不按顺序

csv - 将 CSV 内容转换为 Go 接口(interface)以将它们上传到 Google 表格

rest - Go Gin 设置和从中间件访问上下文值

postgresql - SQL Prepare语句返回语法错误

go - 如何检查函数参数和类型

go - 是否需要为变量分配默认值?

Golang : make slice performance

csv - 使用 Golang 获取 CSV 数据