向Java程序员介绍Go,还需要优雅的介绍,我觉得主要从以下角度考虑。
1. Java 有哪些优点,Go 是否拥有;
2. Java 有哪些不足,Go 有没有解决;
3. Go 特别棒的特性;
### Java 的优点,Go 是否拥有
Java 经过很多年的发展,形成了很好的生态。一门语言的生态是至关重要的,就好比一家公司的壁垒。Java 一直以来,有 谷歌、IBM、Oracle 等超级大厂的支持,有开源界牛逼的 Apache 组织支持,产生了很多顶级的软件,比如大名鼎鼎的 Hadoop、ElasticSearch 等等,Java 社区的原则也比较统一,基本 Spring 一统天下,没那么多纠结,很成熟!这些都是很强的壁垒!
相较而言,Go 语言还比较年轻。但是,自从 Docker、k8s 的兴起,为 Go 语言的生态搭建了自己的壁垒,同时带来了一大批学习者,很有明星项目效应!
因此,在大型项目中,一般会多语言、多生态并存!
### Java 有哪些不足,Go 有没有解决
1. Java 目前大家抱怨比较多的是写法啰嗦,虽然新版本在不断改进,但毕竟有历史包袱。
2. Java 学习门槛较高。拿 Java Web 开发来说,首先你得学完 Java SE,然后是 Java EE,学习 Tomcat 这类容器,接着你还得掌握 SSH 框架,这些经过了很多年的发展,生态庞大,学习成本较高!
3. Java 程序内存占用较多,经常莫名卡死。目前公司使用了 confluence 一套系统,隔断时间就有人反馈打不开了,和美团的人聊过,他们也是遇到同样的问题,得定期重启。
4. Java 近期版权似乎也是个问题
Go 从诞生之日起,就崇尚简洁,崇尚工程实践,没有历史包袱,可以借鉴先辈们的优秀设计经验。比如 对 C 语言扬弃,保留指针,但废弃指针运算;避免隐式类型转换带来莫名问题,必须显示转换。虽然是静态语言,但从 Python 这样的动态语言借鉴了很多优点,语言层面支持 slice 和 map ,使得开发效率有很大提升;同时支持面向过程、面向对象和函数式编程 等等。
整体上,Go 语言简洁,易于学习,每个人写出的代码风格一致。在内存占用方面,因为没有重的 VM,还是比较少的。
在现在重前端的大背景下,服务端负责 API 的情况下,Go 会是很好的选择。
### Go 特别棒的特性
1. Go 的招牌是并发。因为原生支持协程(goroutine),使得写并发程序非常方便。goroutine + channel 一对招牌搭档!
2. 极快的编译速度。有一个段子说,Go 语言是在 C++ 项目在编译的时候开发出来的!
3. 强大的工具链。
4. 标准库提供 net 和 http 包,可以很方便的实现一个 HTTP 服务。
5. 类鸭子类型的接口,interface 的设计。
6. 标准库支持日志和单元测试。
7. 和Java 一样,自带 GC。
### 总结
无意语言之争,只是希望大家对语言有更全面的了解,根据情况选择适合的,没有最好,只有最适合!欢迎留言发表你的看法!
当然,Go 也在不断完善中,比如没有泛型,近期才对包依赖有了较好的官方支持,被人议论最多的错误处理等,如果 GC 一样,我相信 Go 会越来越好。
最后补充:Go 是谷歌出品的,创作者是几个骨灰级程序员,国内有很多大厂在使用 Go,学习 Go 语言能够让你比 Java 更容易接触底层知识!
有疑问加站长微信联系(非本文作者)