请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

如题,想请教下老师,执行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。

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

正在回答 回答被采纳积分+3

1回答

ccmouse 2021-02-21 10:38:46

的确只有这个不同,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 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信