非零基础自学Golang

第15章 Go命令行工具

15.1 编译相关指令

15.1.2 run

我们在调试代码时通常会使用go run命令。

该命令会编译执行Go语言源码,不会在当前目录生成可执行文件,而是生成在临时目录下。

go run的对象只能是单个或多个.go文件(必须同属于main包),且不能为测试文件,例如:

// 编译运行file1.go文件
go run file1.go

// 编译运行file1.go和file2.go文件
go run file1.go file2.go

// 编译运行当前目录下的所有文件
go run *.go

无法针对包运行go run指令,只能使用go build编译整个包,再运行编译后的可执行文件。

如果go run指定源文件中引用了其他文件的方法或定义的变量,编译器会抛出如下undefined的错误。

# command-line-arguments
15.6.1.go:19:18: undefined: Num

[ 动手写15.1.3]

package main

import (
   "fmt"
   "os"
)

func main() {

   fmt.Println("os.Args: ", os.Args)
}

动手写15.1.3运行后,会将可执行文件编译生成到C:\Users\admin\AppData\Local\Temp目录中,Linux则是生成到临时目录“/tmp”里。

在这里插入图片描述

os.Args为命令行的参数,第一个参数为可执行文件的文件名,包括全路径,剩余参数为程序执行前传入的参数,也就是go run 15.1.3.go后面的参数。

在这里插入图片描述

我们在使用go run命令时,还可以使用-work参数来显示当前的编译目录。

在这里插入图片描述

我是怎么跑着跑着C 盘容量在变, 你小子

go run这个命令具体干了些什么事情呢?我们可以使用-n参数输出编译过程时所用到的命令。

在这里插入图片描述

在这里插入图片描述

这里可以看到创建了两个临时文件夹:b001和exe。编译器先是执行了compile命令,然后是link,生成了归档文件.a和最终可执行文件,最终的可执行文件放在exe文件夹里面。

命令的最后一步就是执行了可执行文件。