千字长文 | 学习编程这么多年,聊一聊Java和Go_go和java后端开发劣势-程序员宅基地

技术标签: Java  学习  java  golang  

大家好啊,我是 jonssonyan,我的职业是一名程序员,每天被繁琐的业务折腾的死去活来。平时我会和大家分享一些平时发现的宝藏软件、好站、一些编程心得。分享已经成为了我的一个习惯。今天我们聊一聊我学习 Go 语言的心路历程。

我从 2019 年开始接触 Go 语言,今年 2 月份开始大量使用 Go 语言进行软件开发,主要是用它做 Web 的后端方向,应用在我的项目 Trojan Panel。我本身主要是从事 Java 开发,辅助学习了其他语言,我认为一名软件工程师掌握 3 门左右的语言是必不可少的,唯一不变的持续学习的态度。

为什么我喜欢用 Go 来构建摸的后端服务?

当时做技术选型时候,由于我是从事 Java 后端,首当其冲我会考虑使用 Java 作为后端的首选语言,但是考虑到对服务器资源的最大利用,我比较关注软件的性能,毕竟国内服务器 CPU 和内存还是比较正规的,而且我也希望我的软件比较亲民,所以我选择了 Go。其实最主要的原因是 Spring Native 还没有进去 GA,如果 Java 在云原生领域比较成熟的话,我会毫不犹豫的选择 Java。

Java 和 Go 的区别和各自的优势

这也就引伸出一个问题,Java 和 Go 的区别是什么?它们之间有什么优势?

在目前,Java 主要应用领域是后端开发和大数据开发,Go 语言主要的应用领域是后端开发和云计算。在我写 Go 的一年多时间里,发现 Go 语言确实很强大,虽然每次换平台都需要重新编译,但是 Go 自带的工具链很成熟,编译只需要一行命令,而且 Go 内置 go mod,它是相当于 Maven 一样的第三方包管理器,而且 Go 还自带了 go test 和 go fmt 等终端命令,这样大大提高了我们的开发效率。

当然 Go 也有自己的劣势,同时这也是 Java 的优势。第一,Go 语言起步比较晚,是在 2009 年开始面市,相比较来说 Java 的发行时间是 1995 年,所以 Go 还是一门比较新的编程语言。直接导致了 Go 的轮子比较少,有些东西可能还需要自己手动造轮子,而 Java 的库实在太多了。第二,语法糖。Java 语法优美,Go 崇尚的是大道至简,所以语法糖比较少。不过这也是有好有坏,语法简单可以让大家写的代码差不多,不会很很多的 Bug,而且大家都能看懂。第三,框架(生态)。Java 在生态这方面简直是无敌的存在,这主要得益于 Spring 全家桶,Spring 让 Java 走上了神座。Go 语言知名的框架也很多,但是远远没有 Spring 影响那么大,不过生态这方面只是时间问题,现在很多大厂都在使用 Go 语言作为开发语言,比如 B 站,腾讯等知名大厂,这都是在丰富 Go 语言的生态,我相信 Go 语言会在将来市场占有率慢慢稳步上升。

Java 和 Go 如何选择?

如果项目的业务比较复杂,例如秒杀场景,购物返利场景,诸如此类,建议你使用 Java,Java 在企业级应用开发上很有优势,而且语法优美,类型安全,语法糖也很多(主要得益于 Java8 的 stream 流和 lambda 表达式)。如果你的项目业务一般或者比较简单,而且需要考虑性能,希望尽量减少服务器资源的耗用,建议选择 Go。

本文主要分享了学习 Go 语言的心得还有我看好 Go 的原因,总的来说,编程语言只是工具,每门语言都有自己的擅长的场景,如果另外一门语言更适合,放弃之前的语言,学习新的语言即可,还是那句话,永远培养的是自己的学习能力。

我是技术栈主要是 Java Go 如果大家有问题,可以直接私信我,或者在 B 站私信我,有问必答。 原创不易,如果对你有帮助,欢迎点赞+关注,我们下期再见。

另外我在 B 站注册账号,不定期会更新一些视频,主要内容是编程知识和免费资源,如果你觉得视频的方式更容易接受,欢迎来踩我的 B 站:jonssonyan

我的 bilibili:https://space.bilibili.com/374864141

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/y1534414425/article/details/126811427

智能推荐

python怎样控制继电器_Python 控制220V ??? 老板,你没看错!-程序员宅基地

文章浏览阅读643次。这是武散人著《自拍教程》(自动化测试Python教程)系列第60篇文章。重要提醒:本案例涉及220v危险电压上电下电测试,存在安全风险,请切勿随意尝试!!!案例故事 很多移动终端都不带电池,都是直接电源插头供电,比如Android电视机(220v),小米小爱同学智能音箱(220v转5v的电源转换器),智能后视镜(12v)等智能终端设备,Android家庭信息机平板(5v),还有电饭煲,微波炉,空调..._python实现继电器对android手机进行上下电

资源 | 分享几个强大的网站_电子世家-程序员宅基地

文章浏览阅读8.5k次,点赞5次,收藏9次。分享几个强大的网站:1、电子世家电子世家汇总了大量电子、嵌入式等网站、论坛。网址如下:http://www.dianzishijia.com/2、极客导航极客导航汇总了大量的技术、产品、设计、运营、职能等方面的内容。网址如下:https://www.gogeeks.cn/nav3、在线工具-程序员的工具箱这个网站有大量的在线工具可以使用,工具包含开发类、站长类、极客类、..._电子世家

css的animation动画_css animation-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏12次。顾名思义,它可以控制动画的状态 – 运行或者暂停,类似于视频播放器的开始和暂停,是 CSS 动画中有限的控制动画状态的手段之一。在 1-2 秒范围内随机,这样,我们就可以得到非常自然且不同的上升动画效果,基本不会出现重复的画面,很好的模拟了随机效果。属性或其子属性,该属性允许配置动画时间、时长以及其他动画细节,但该属性不能配置动画的实际表现,动画的实际表现是由。中定义的第一帧这种说法,因为动画运行的第一帧和最后一帧的实际状态还会受到动画运行方向。,可以有效的构建更为随机的动画效果,让动画更加的自然。_css animation

Android 9 Audio系统笔记:AudioFlinger音频流处理流程_audio effects 的preprocess-程序员宅基地

文章浏览阅读4.9k次,点赞7次,收藏24次。好久没写了,今天碰巧有个同事问我,我就顺便写一下,后面就不用又找一遍代码了,所谓好记性不如烂笔头。这块是关于如何从AudioTrack 写入数据到audioflinger,以及audioflinger如何写入到hal层,主要写一下流程。client写入数据://frameworks\av\media\libaudioclient\AudioTrack.cppssize_t AudioTrack::write(const void* buffer, size_t userSize, bool bloc_audio effects 的preprocess

Android学习笔记——归纳整理_android学习笔记汇总-程序员宅基地

文章浏览阅读8k次,点赞26次,收藏155次。Android入门笔记——归纳总结_android学习笔记汇总

中南大学2019计算机研究生分数线,2019中南大学研究生分数线(含2016-2019历年复试)...-程序员宅基地

文章浏览阅读354次。2019中南大学研究生分数线(含2016-2019历年复试)考研就是人生的第二次高考,是再一次改变自己命运的机会,所谓7分靠努力,3分靠填报,中南大学历年研究生复试分数线是2019-2020届考研学子十分关心的问题,以下是大学生必备网为大家整理的2016-2019历年中南大学研究生复试分数线,供大家参考,真切希望大家都能考上自己满意的学校。1、2019年中南大学研究生分数线一、学术学位学科门类(专..._中南大学计算机技术复试线历年

随便推点

Bean with name ‘XX‘ has been injected into other beans [XX,XX] in its raw version.......... 错误分析及解决-程序员宅基地

文章浏览阅读2.9k次。启动出现大量异常,均以 Error create bean ‘xxx’ 开头,且很多类似如下且每一行最后末尾都会指出被循环依赖的 bean 名异常抛出由于是嵌套循环的,所以这一类错误的根本原因往往会置于每一行的最后以及日志的最后且在日志的最后一处错误会具体写出如下错误,明显说明是循环依赖错误,是在错误日志的最后一部分!会出现类似如下错误:Bean with name ‘xxxxService/dao’ has been injected into other beans [xxx,xxx,xxx] in_has been injected into other beans

web前端基础知识_web前端初级证知识点-程序员宅基地

文章浏览阅读6.1k次,点赞12次,收藏101次。一、网页、静态网页、动态网页 二、网页名词解释 三、Web标准 四、Web页面的组成_web前端初级证知识点

完美测试解决App一键唤醒_Deeplink,直达指定页面_应用直达链接测试-程序员宅基地

文章浏览阅读2k次。从运营角度来看,引导已下载用户打开App,能提高用户粘性和活跃度,而用户在App内的产品体验自然也比H5页面要好;引导未下载用户下载App并进入指定页面,显然能给用户更好的产品初体验。引导已下载用户从H5页面或者主流社交平台唤醒App并且直达指定产品。引导为下载用户从H5页面直接下载App,首次打开App时直达指定场景一键唤醒(Deeplink)的具体使用示例:用户通过打开链接,WebView判断是否安装,未安装情况下引导用户快速下载,下载完成后直达指定的场景页面。常见的问题部分主流平._应用直达链接测试

springboot 新增模块之后,需要设置java文件夹为Sources Root_springcloud 生产者有sourcesroot-程序员宅基地

文章浏览阅读1.2w次,点赞3次,收藏3次。 springboot 同项目下,新增模块之后,所有资源文件格式显示会有问题,需要设置java文件夹为Sources Root之后才能进行编码。模块src下java包右键 -> Mark Directory as -> Sources Root..._springcloud 生产者有sourcesroot

树遍历(BFS+DFS(递归+非递归))-python代码整理_bfs算法递归遍历树 python-程序员宅基地

文章浏览阅读1.1k次,点赞5次,收藏13次。数据结构算法-树最近再刷leetcode的树,整理了常用遍历代码包含树的层次遍历(广度优先遍历)与前中后序遍历(深度优先遍历):#########################################层次遍历(广度优先遍历)★★★★★#BFS通用模板,层次遍历通用:#使用队列实现def levelOrder(root): if not root: return [] queue=[root] ans=[] while queue: a=[] #方便保存每一层的_bfs算法递归遍历树 python

有关java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186646784)的解决方法-程序员宅基地

文章浏览阅读1.6k次。问题描述:在用Java访问数据库时,出现以下提示:java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186646784)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))原因:在连接数据库时,所连接的url的地址格式输入有误解决方法..._connection refused(description=(tmp=)(vsnnum=186646784)(err=12505)(error_sta