golang的优势 | 青训营笔记

767 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

(内容根据字节跳动青训营课程内容以及自己的理解编写)

近期将日更这几个主题的文章,欢迎关注!

  • 几种数据类型详解
  • 全面理解go协程
  • channel通信
  • Kitex
  • Hertx
  • Gorm

go的优势

首先我们要清楚,我们为什么要学习一门语言,它能干啥?适用于什么开发?相比其他的语言有哪些优点?

以下是青训营给出的答案:

image.png

1.高性能,就拿协程举个例子

大家都知道线程和进程,在操作系统这门课中会学到,进程太大了,切换损耗大,所以有了线程。协程也可以这么理解,如下图:

image.png

线程是MB级别的,属于内核态,协程是KB级别的,是用户态。

(内核态可以看做是你的领导,用户态是你。比如你要审批文件,你需要去找领导签字,这个时候需要切换内核态。比如你要敲一行代码,你就是用户态就行。用户态不需要切换内核态的消耗。

所以go可以主动启动协程,不需要系统去“审核”(切换成内核态),而且可以轻松启动上万个协程(KB级别)

这么一看是不是好厉害。

image.png

2. 语法简单

比如启动一个web服务:

image.png

几行就搞定

3.和4. 库多和工具链

github等社区许多开源库,后面的文章会写到

5. 静态编译

这个的意思简而言之就是,build之后不需要依赖别的库了。

这里我一开始也没不怎么清楚,直到看了这一篇文章:传送门

编译之后可以直接跨平台运行,不需要依赖其他东西

c语言的:

image.png

go语言的:

image.png

但是size大一些:

image.png

(有时候也会动态编译,因为是基于Cgo编译的(C+go哈哈哈),C语言有很多性能优秀的数据库,也可以手动关闭,这会导致编译出来的文件大一些,关闭的方式就是在编译的时候加上参数,上面一个文章里有)

6.快速编译

这个也厉害,Java开发者都知道,JVM本地一跑起来就是十几秒,并且占用很大的内存。

而go语言,课程介绍,编译只需1s,整个抖音的上线代码编译也只有一分钟,这个是真的厉害!

7.跨平台

详细见第五点,就是不需要依赖其他东西就可以跑起来

这一点的话,就拿docker来说,你不需要多一层JVM了,省下了很多docker内存!

(动辄大几百MB的java容器很吃内存...)

docker部署

8.垃圾回收

当前Golang使用的垃圾回收机制是三色标记法配合写屏障辅助GC,三色标记法是标记-清除法的一种增强版本。

传送门

总结

我之前用的是java开发,go语言相比来说确实有不少优点,解决了我在java开发中的一些问题

引用参考

1.编译机制

2.GC机制