运行go run和go build后执行文件的区别?

来源:5-3 go mod的使用

拧壶冲

2021-02-19

如题,想请教下老师,执行go run main.go和go build main.go 后执行./main 有什么区别吗?
我的理解是这样,他们执行结果是一样。但是:

  1. go run main.go 直接执行,主Goroutine应该是go,比如在ps 中查找,应该会有两个ps,一个是go run的ps, 一个是程序执行的,且前者是后缀的ppid,
  2. go build main.go后执行文件./main 的执行方式,而ppid就是系统启动他的那个ps。

除了这个不同,老师知道还有其他不同吗?

写回答

1回答

ccmouse

2021-02-21

的确只有这个不同,go run做的事情就是go build,然后运行可执行文件,运行结束后销毁编译出来的可执行文件。

详细看看ps:

141938 31418   918   0 10:34AM ttys012    0:00.52 go run main.go

141938 31440 31418   0 10:35AM ttys012    0:00.01 /var/folders/3s/3h057ljx5s9995ny1ylgv_p8004_lk/T/go-build953375620/b001/exe/main

所以就是go run生成了一个子进程31440,里面运行编译出来的main。但是go run命令本身需要等待31440的结束。所以是两个进程。


0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程