工作9年,主语言是Java,Go也搞过,可以回答题主的问题。

先给我的结论:为了更稳妥起见,建议Java为主,并且一定要有火候,Golang 为辅,需要时能快速切换。

一方面 Java 就业岗位多,薪资给力;但另外一方面,Go 确实很有潜力

我有好几个读者都是,直接要求 Java 进去后转 go!

PS:Golang 其实不应该是 Golang,而是 Go,因为 Go 在选域名的时候 Go 已经被占用了,所以就选了 Go language,简拼在一起了就叫 Golang,叫的人多了,Go 也就有自己的外号了

一、为什么会要求 Java 转 Go 呢?

最直接的原因就是 Go 这边比较缺人,而 Java 这边基本上是招聘的多,竞聘的更多。

熟练掌握 Java 的一般都比较能打,转 Go 后作战能力肯定也是不容小觑。

前段时间,我在知乎上刷到一条热榜,特斯拉这种玩火箭的公司竟然使用的 .net core 技术框架,而不是 Java/Go?

我的回答里引用了 Java 之父 Gosling 曾说过的一句话:“语言只是实现目标的工具,而不是目标本身。”

对于我们国内的开发环境来说,Java 的势头的确很猛,我个人也是 Java 的重度使用者,但我私底下也在学习其他的编程语言,因为只有这样,才能最大程度上保持自己的竞争力。

每种编程语言只要能发挥出它最大的优势,就是值得我们去学习和使用的

再者,编程语言这东西,你掌握了一个,再学另外一个也会很快的。截止到目前为止,我学过 Python、C/C++、Go、JavaScript 等等,因为有 Java 语言的底子在,学这些编程语言的时候,阻力基本上就像在泳池里游泳一样,一开始你会感觉有点困难,等熟练了之后,你会感觉很舒服。

这里我也要给大家强调一下,永远不要把自己局限于某一门编程语言之上,即便 Java 现在是顶流,也要尝试去拥抱其他的编程语言,尤其是要重视计算机基础的学习下面是我这十多年来积攒的一套非常完整的计算机必读的经典书籍,对学编程的同学应该会有非常大的帮助,这也是我十多年编程生涯里留下的宝藏

里面的书单真的非常 nice,不管是学习编程的新手,还是工作多年的老手,应该都很有帮助

二、Go 的优势和劣势

Go 语言诞生于 2009 年,发展到现在,已经12 岁了。Go 是一种开源编程语言,可以轻松构建简单、可靠、高效的软件。

很多明星级开源框架,比如说 Kubernetes、Docker等,都是基于 Go 语言编写的。再加上近些年来微服务架构和云原生技术的普及,也大大的带火了 Go 这门编程语言,使其在 C/C++ 和 Java 中杀出了一条血路。

自 2010 年 5 月起,谷歌开始将 Go 语言投入到后端基础设施的实际开发中,很多我们能耳熟能详的应用都有使用 Go 语言,比如说谷歌地图、Google Cloud 等。

国内的字节跳动,Go 在常用的编程语言中占比是最高的,大部分产品的后端都在使用 Go。

Google 和字节两家大厂对 Go 的投入,在一定程度上又加速了 Go 这门编程语言的发展。

目前,使用 Go 语言的公司越来越多了,阿里、百度、腾讯、小米这些互联网大厂也在积极拥抱。

这使得 Go 工程师的薪资待遇也得到了很大程度上提高。

当然了,目前基本上除了大厂,很少有其他中小型公司用 Go,因为 Go 的生态目前还比不上 Java,没有 Java 那么丰富健全,中小公司的投入产出比比较低。大厂有人有钱,愿意在 Go 上投入成本。

Go 也没有像外界吹捧的那么牛叉,就编程语言的排行榜上来看,Go 还是个滴滴(Python、C/C++、Java、C# 这些仍然是前排),有待发展。

三、Go 语言该怎么学习呢?

但不管怎么说,Go 语言的确是值得去学习的。如果有 Java、Python、C/C++ 的基础,学习起来 Go 也没有想象中那么困难。如果公司确实需要转 Go 岗,也完全没有必要抗拒。

这里先给大家推荐一个 Go 语言的学习路线图,如果你想要成为一名Go语言的开发者的话,你可以沿着这张图里面的路径去学习,里面记录了一些你可能也想学习的库。当你问到:”我想成为一名Go语言开发者,接下来我要学些什么?“,这个路线图就是一个很好的建议。

接下来是,学习资料推荐。不管是学习哪一门编程语言,顺序基本上就是视频入门+教程/书籍巩固+项目练习

1)视频课

第一套视频:《Go 编程基础》,一套针对 Google 出品的 Go 语言的视频语音教程,主要面向 Go 语言新手级别的学习者。

第二套视频:尚硅谷 golang 入门到实战教程,教程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。

2)教程/书籍

第一套教程:Go 语言之旅,这是一个对初学者极其友好的在线网站,并且每一步都可以直接运行代码并看到效果,这至关重要的。初学阶段,最重要的就是多练。右侧菜单可以快速浏览内容,非常方便。

第二套教程:LeetCode-Go,一本 LeetCode 的开源书,旨在帮助LeetCoder提供解题思路和代码的项目。到目前为止,已经收录了超过500道题的题解思路和代码,代码方案都是运算效率胜过100%的“标准答案”,代码是用 Go 语言实现。是推荐给学习Go语言小伙伴们的入门资料:

第三套教程:《Go 语言设计与实现》,目前关心 Go 语言设计以及演进的博客和书籍比较少,而这一本就是不可多得的经典之作。

这份教程的内容可以分成四个部分,分别是编译原理、运行时、基础知识和进阶知识,这四部分几乎覆盖了 Go 语言从编译到运行的方方面面,让读者对 Go 语言有更加整体和深刻的认识。下图的思维导图中展示了本书的主要内容:

第四套教程:《玩转 GO》,本教程的内容包括但不限于并发、网络编程、垃圾回收、组合、GO UNIX系统编程、基本数据类型(Array,Slice,Map)、GO源码、反射,接口,类型方法等高级概念。

在线阅读地址:https://wskdsgcf.gitbook.io/mastering-go-zh-cn 不知道为什么挂了,我还提交了一个 issue。

不过幸好我备份了一份离线版 PDF,里面的内容还是非常完整的:

第五套教程:Go标准库文档,可以查询每个API的具体使用方式,是 Go 开发者必备手册。

再推荐一些比较优质的纸质书籍吧。

第一本:Go语言实战,本书关注Go 语言的规范和实现,涉及的内容包括语法、Go 的类型系统、并发、通道和测试等主题。

第二本:《Go 语言学习笔记》,上卷细致解析了语言规范相关细节,便于读者深入理解语言相关功能的使用方法和注意事项。下卷则对运行时源码做出深度剖析,引导读者透彻了解语言功能背后的支持环境和运行体系,诸如内存分配、垃圾回收和并发调度等。

第三本:《Go Web 编程,本书围绕一个网络论坛 作为例子,教读者如何使用请求处理器、多路复用器、模板引擎、存储系统等核心组件去构建一个 Go Web 应用,然后在该应用的基础上,构建出相应的 Web 服务。

3)实战项目

第一个项目:seaweedfs,GitHub 上星标 13k+,这是一个分布式文件系统,基于 Go 开发,部署方便,使用简单,功能强大。

第二个项目:seaweedfs,GitHub 上星标 13k+,这是一个自带文件浏览器的网盘服务。支持文件浏览、生成分享链接、批量上传、创建文件夹等功能、用户系统。安装步骤简单方便。

第三个项目:go-admin,GitHub 上星标 5k+,基于 Go 语言的一个数据可视化与管理平台。让用户能在极简短的时间里,用极简短的代码量搭建起一个后台管理。

GeeCache

四、Java 和 Go 如何做取舍?

Go 语言设计的晚一点,所以可以站在巨人的肩膀上,不像 Java,历史包袱很沉重。比如 Go 在并发编程方面,就比 Java 更轻量级,性能也更强劲,因为 Java 诞生的时候还没有为高并发这样的场景做好准备。

因此,Go 比 Java 更符合云时代的精神。

Go 的使用简单,如果有其他编程语言的基础,也容易切换,阻力小。国内的大厂,比如说字节、腾讯这些都是要经常对抗高并发的场景,所以对 Go 的人才需求量比较大。

但与此同时,由于 Go 的整个生态还没有 Java 那么完善,所以中小厂直接上 Go 的凤毛麟角。所以稳妥起见,Java 为主,Go 为辅是比较合理的选择。

Go 这边没有 Java 那么卷,岗位的薪资却也比较客观。如果能趁早建立优势的话,以后发展的路子也就更宽广了一些。

但一定要记住,大学阶段,编程语言不是最重要的,反而计算机基础是最重要的,尤其是操作系统、计网、计组、数据结构与算法:计算机专业应该有的硬核学习资料

万丈高楼平地起,勿在浮沙筑高台。

基础扎实了,切换编程语言的时候只需要熟悉一下语法和库就 OK 了。

一名优秀的程序员,只会一种编程语言肯定是不够的,应该深入掌握一门,然后再涉足 1-2 门,这样的话,你能横向对比出来哪一种编程语言在哪一些领域有着比较大的优势,体会不同编程语言之间的差异性也会让你变得更加的优秀。

从个人职场发展来看,多一条腿走路,更稳。。

我是二哥 @沉默王二 ,希望以上的回答能帮助到大家。。笔芯~