这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
1 go执行流程
1.1 编译运行
如果是对源码编译后,在执行,Go的执行流程细节如下:
go文件(源文件)——> go build(编译)——>可执行文件(.exe或可执行文件)——>运行——>结果
1.2 直接运行
如果我们是对源代码直接执行go run源码,Go的执行流程细节如下:
go文件(源文件)——> go run(编译运行下一步)——>结果
1.3 区别
两种编译方式的区别是 第一个是通过go build生成一个exe的可执行文件,在通过运行exe二进制文件运行结果,第二种是通过用go run来直接运行,第一种会直接运行时间快,第二种会比第一种长,因为编译和运行放在一起了。
1、如果我们先编译生成可执行文件,那么我们可以将该可执行文件拷贝到没有开发go开发环境的机器上,仍然可以运行
2、如果我们是直接go run go源代码,那么如果要在另一个机器上运行,也需要go的开发环境,否则无法执行
3、在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以可执行文件变大了很多。
4、可以通过go build -o (自定义文件名).exe hello.go来指定生成的可执行文件名
5、如果执行时候没有错,没有任何提示
6、如果程序有错误,编译是,会在错误的那行报错
1.4 与java的区别
1、无虚拟机,不跨平台(这里的平台指操作系统)(可以运行多个平台,每个平台打不同的二进制程序包),需要打包编译成对应服务器操作系统版本(windows/linux)的可执行程序(比如windows是exe)。(注:说go跨平台的是指32位和64位相同操作系统之间的跨平台)
2、因为Go程序直接打包成操作系统可执行的文件,没有虚拟机在中间转换的一层,所以理论上执行效率会更高。
3、相比Java的语言和代码编写风格,Go更简洁,可以用更少的代码实现同样的功能。
4、Go语言底层也是C实现的,又做了高并发的设计(Java出生时(1995)还没有多核cpu,所以他的并发支持后来添加上去的,Go(2009)出生时已经有了多核cpu的电脑,它在设计语言时就考虑了充分利用多核cpu(英特尔2005首次推出多核)的性能),所以性能高,高并发的支持(高并发支持其中指的一个就是充分利用多核cpu的性能资源,比如go程序默认使用所有cpu(除非自己设置使用多少))也好。
5、天然的适用一些特定系统的开发,比如区块链类系统(如以太坊底层系统、以太坊上层应用程序),云计算和容器(Docker,K8s底层都是go开发的)开发的(大公司自研运维管理项目也大多是用go做底层的开发),网络编程(类似于java的Netty)。