Golang Go语言到底优势是在哪里?
Golang Go语言到底优势是在哪里?
我们现在的项目是用的 django+restful 做接口,最近接触到很多 go 的内容,被网络上的讨论有点弄晕了。如果做接口后端,为什么 go 比 python 有优势,除了速度这些还有什么?
说一个吧,几年前尝试 Django + Nginx 配置差点疯掉。Go 甚至 Nginx 都不需要扔服务器上就跑了。
更多关于Golang Go语言到底优势是在哪里?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
速度就是优势,省了一堆优化的时间
还有静态编译好部署
静态类型,方便重构 /避免一些类型错误
说实话把,我觉得 GO 挺像易语言的
那种做好编译就能用的
纸面上的性能优势不是真的性能优势
我日常写一些文件读取匹配处理等功能的时候,通常 php 比 go 快
但凡涉及多线程,go 的优势就体现出来了
go 的协程使用起来非常方便,是一门优秀的语言
速度就够了… golang 随便十万并发, Python 不借助 C 的话, starlette 也就三四万… Django 的速度就不提了…
其实感觉 golang 就是一种压榨机器性能和程序员友好之间的另一个折中, 和 python 比, 前者又稍微向机器性能侧重了一点点, python 则是像程序员侧重一点点. 实际场景里 golang 主要做对比的是跟 java 比压榨性能, 跟 C 比初级程序员友好. 和 py 这种脚本语言, 性能一项就足以… 不是一个量级, 至于很多人提的可读性, 平时真没感觉比 py 好…
计算密集型和 io 密集型都还算挺快
语法简单
google 背书
docker 流主力
国内跟的快
抛开领域谈语言,就是耍流氓。
现在的趋势是什么?
微服务,分布式,
这些领域什么框架火?
这些框架都是什么语言写的?
谷歌背书,etcd,k8s,docker 主流的云原生时代的宠儿都是 go 的,我要是说他没优势,你信不,你要是问我具体好在哪,除了感觉写线程再也不用 pthread_create,其它真没什么太大感觉。。。。
不用在乎被反编译吧。
协程使得并发编程超级简单,性能还杠杠的,就这一条非常适合微服务开发,真香!
运行下服务器还怕过个?
交叉编译,静态编译,高并发,方便的线程进程,面向接口
没有 generic
那又如何呢?
泛型已经有提案,还是第二版了,在做了,在做了
接口项目的话很多性能上的问题还是数据库和网络上吧? go 带来的收益如何扩大呢?
他妈的 kubernetes 用 go 写的 还不够吗
没有了
语法简单,只有 20 多个关键字
强类型,有静态检查,计算性能高
适合针对多核 CPU 服务器编程,有效利用多核 CPU 带来的单机性能优势
编译后二进制包易分发
我听说,绝大部分项目都远远不到谈性能这个阶段……
我好像也是这么听说的。😄
原生协程,docker,k8s, etc… 云产品开发的霸主。 生态上去了
举个例子,搜索。100 万条数据找 10 条匹配度最高的。
一台服务器+一个数据库,基本上瓶颈会出现在数据库,因为你要在 100 万条记录的数据库中寻找 10 条数据。
换个做法,一台服务器,100 个数据库,每个数据库存 1 万条数据,那么一次搜索查询,需要并发出 100 个数据库请求,那么这时候瓶颈就会出现在应用服务器的并发性能上了。
所以 go 要扩大收益,架构也要跟着改变。
多试试,就会知道,随便就可以撸小东西用,真方便
我个人感觉最大的优势还是在不改动代码的情况下,go 编译后的并行 /流水优化实在是相当厉害
简单省事
性能可能没大感觉,但是动态一时爽,重构火葬场…
复杂接口,维护时间一长,文档不一定准确了,修改一处结构不知道会影响到哪些地方
测试覆盖不了所有流程,虽然看似测试通过,但是还有可能运行中崩掉。
效率高,静态编译。
效率一条就足够了
跟我学 vlang 吧
go 在 Java 之前出现,不是完美了?
接近 C 的性能加现代语言的优雅
简单和性能的折中吧
c 性能好但不简单
py 简单但性能不够
java 性能也算好,但是依然比 go 复杂了点
贵
并没有用特别的优势,只是天下苦 java 久矣,被 java/jvm 搞得心力憔悴,看到一个性能 ok,写起来有没有 c/c++这么痛苦的语言,就觉得很不错。
看大伙讨论 go,也来凑个热闹,这是我用 go 开发的开源云盘 https://github.com/eyebluecn/tank 性能非常好,访问速度很快,这其实就是得益于 go 的语言特性
人家说用 django 开发网站跟 go 比较
我反正感觉一般项目用 django 开发神速。用 go 费劲。
小项目特别是 web 开发.go 的那些框架还有第三方库整合起来不就是 django 啦,然后用起来还没 django 顺手
并发
.net core 的出现, go 的地位应该慢慢要下滑了.
别撤那些运行效率
比如开发个人 web,公司小的网站,就算是一个中小型的商城
我觉得 django 完全能对付
哪有那么多并发啊
你们公司做什么的啊
有那么大的需求吗?
但开发效率完胜 go
现在 go 有哪个框架能跟 django 这样开箱即用匹敌的
一大堆第 3 方开源的库,自己慢慢组合起来
这就是为什么你在网上看到最多的关于用 go 开发的文章
都是写 api,restful
因为用它来开发个传统 web
真要人命
反观 django,开发一个传统型,也就是说不是那种前后端分离的网站
太轻松了
所有的工具 django 都帮你做的好好的
只要把数据模型构建好
基本网站就算做完了
就算写接口
不复杂的话,django 也是能很轻松完成
复杂的话,go 一样做起来麻烦
本来写逻辑,用 python 就是有优势
所有 go 的优势就是在大并发的时候
哪有那么多大并发
全国才几个淘宝,微信啊
一般的需求我完全不知道 python django 哪些不能满足
其实一大部分用 go 的情况
都是那些人在炫耀
炫耀自己用上了所谓的高大上的 go
因为现在 python 太普及了
自己也跟着用,感觉不能提现自己的实力
反正老板也不懂技术
看到那些大公司很多用了 go
自己也要用
都是有病
所以你以为 Django 不能单独跑?
用 python
9 层以上的逻辑基本可以很轻松用
for in 循环来搞定
字符串,数据处理,就像玩一样
反观 go
几个数据类型,变来变去,参数写的死死的
函数方法
接口
一个简单小逻辑
变着方的折磨人
然后写出来还觉得自己多了不起
看我用这么复杂的方式写出来的代码
你看不懂吧!!!!!
go 大家都在说学起来简单,关键字就那么几个
但是用起来,你就知道了
同样实现一个逻辑
我靠,它的语法思考方式真的
反人类
上面 import 了一个库
下面修改下,没有用到
就在那里报错
真是有病
反正你的项目要不是真的所谓百万并发
用 go 真的是嫌你睡眠时间太长
还是你加班时间太短
如果用来写个小小的 10 几行代码就能用的 server
用 go 确实有优势
一旦是那种.不大不小的中小型项目
go 就处于不上不下的尴尬处境
恰恰这种中小型项目是最多的
说的不错。
效率是相对而言的
技多不压身
#43
的确,
1. import 的包如果不使用, 他要报错. define 的变量 not use 也要报错.
我现在先 import 或者定义好, 一会儿用不行么?
或者 debug 的时候要注释掉一些代码, 还得找到之前定义的地方再注释一遍
2. 没有 exception, 每个 err 都要去 check and panic 一下
等等…
golang 只能写点小工具挺合适, 大型项目还是用 C#(dotnet core), java 之类的
不会,.net core 会和 java 抢占地盘,go 的特点和他们不同
#47 现在 go 能做的, .net core 基本都能做啊
争啥,爱用啥用啥。都 9102 年了还在争,我要来说一句,PHP 是最吼的!
python 和 go 对比吧
python 还有个 tk 做界面,go 想开发个 c/s 程序 现在好像不好弄
python 对比于 pb 程序慢很多,我处理检验设备传过来的结果数据,存到数据库慢的不行,不过可以接受
语言简单,不管谁写出来的代码,只要稍稍用心就可以看得懂在干什么,不需要烧脑解码某些天书语法
交叉编译,部署都超级方便
最主要的是基本会点编程的只要稍加学习都能用它干活,做好 review 和 ci,体验还是不错的,搭配 go mod,goland 使用效果出奇的好
从来发布置的角度来讲
你要 django 能跑起来
至少必须得有 django + uwsgi + nginx/Apache。
那么问题来了,uwsgi 的配置你要不要学着写? 写完后 nginx/Apache 的配置是不是也得要写?
这三者之间的交互搞错点东西就炸,初学者能在上面折腾死你,即便有经验的每次新环境配起来也是让你蛋疼
啥,你不会用 Docker 简化配置过程? 那么你 docker 用法要不要学? Dockerfile 怎么写要不要学? docker-compose 怎么写要不要学? 而且正重要的是 Dockerfile 这东西你写完必须得 build 跑起来才知道有没有写错有没有 bug。 相性我,你在没有前人项目的基础上徒手写个 Dockerfile,大部分的时间全都是消耗在了 build - run - 出错 回头改 继续 build 的循环中。
而且这特么还没考虑到你写 docker-compose 配置也有可能会有坑。。。。
然后这时候我们来看看 go,服务写好了? 编译出来,可执行文件直接扔到服务器,./hello_world
成了,跑起来了,不用 nginx 不用 uwsgi, 不用搞破 docker, 并发,性能极好,你说,哪个爽?
.NET Core 现在也可以编译为单个可执行文件了是吧?我的意思就是跟 golang 一样,不需要单独安装运行时,扔到服务器上就能跑。
那我为啥不用 php?php 写 web 比 py 还轻松
简单,方便不就好了
感觉 groutine 是杀手锏,其他的特点都没啥稀奇的
可以这么说
一个用 go 能开发出来一个哪怕是很简单网站的人
他对网络这块的知识要求就已经很高了
你说的那些什么配置
nginx
uwsgi
这些
相信如果你是个用 go 做开发的人
早就过了需要专门抽出时间还要去学习的阶段了
因为 go 做 web 开发是非常底层的一步一步组建起来的
你如果对底层这些不懂
你根本无法用 go 来开发
相反
一个用 python django 开发的人
真的对底层网络这些需要的知识不是那么高
因为所有的都封装好了
导致了
很多人,用框架开发了很多网站
其实他对网络的很多底层东西,懂得并不多
因为并不需要
然后你这个时候出来说
go 开发完了以后,配置时多么的简单
你看直接传上服务器,就能跑起来
那是因为你需要对跑起来之前很多的底层,自己处理
你说同样是一个人
目的是开发一个网站
到底是是哪个对开发人员友好
用 go 的话,你先要学习很多基础知识
有功夫学这些
我用 django,都已经开发完了
那些你所谓的配置
你真的是每次都写吗
不都是一套配置文件,全部项目都一样用
就是修改下里面 ip 和 web name
这个你说学起来有多难
或者说根本不用学,在网上找个案例,原样 copy 就可以了
很多人开发了很多网站
真的对 nginx 搞懂拉?
不都是用一份不知道哪里找的别人的配置修改下就能用了
跑一个网站,用的配置都是一样的
一个中小型项目,我就不明白
你搞出来这么多幺蛾子
又是 docker 又是 build 的
需要吗?
只要在环境里面安装了 python 还有数据库还有 nginx
数据库你用 go 开发就不需要装拉?
nginx 不就是一行代码就安装好了,配置文件修改下参数就行了
这就
就完事了
你说这些很难吗
比起学好那些 go 的 net http 底层的库
自己要处理好 cookie session 各种注入的预防
到处找第 3 方库,各种修改,把这些第 3 方的库整合起来
oh my god
人家 django 都是开箱即用
orm 完全傻瓜化
不是我说
你用 go 开发
用的是原生的 sql 库还是 gorm xorm 这些?
你自己说当初学这些用了多长时间?
学完了,用起来有 django 的 orm 方便吗?
我还没说 go 里面的模板了
有一个好用的吗?
现在 github 里面排名最高的一个模板处理库 pongo2,api 用法开发目标就是要完全和 django 的模板 api 一致
结果用起来还是各种 bug
你说到底哪个开发效率高
哪个对人友好?
后端,同样经验,go 钱多
python 其实也可以不要 nginx 的。 只是大家都无脑 gunicorn 了。。
golang 的优点还是很突出,快。
php 是世界上最好的语言 不接受反驳{滑稽脸}
#53 .net core 3.0 可以打包成单文件,2.0 就可以不用单独安装运行时了。
3.0 开始就可以了,和 go 一样跨平台编译。
我是来泼冷水的~
1. 并发很容易,但是你确定团队里面的每个初级程序员都能够写好并发代码?不会出现数据竞争,死锁这些问题?就算有 go race 辅助检查,一旦出现幺蛾子这玩意儿调试起来也够呛的
2. 静态编译单文件执行,只要改动一点硬编码东西就得重新交叉编译上传启动,服务器多了就算使用 ansible 上传和跑起来也是够麻烦的,有时候觉得热部署也挺香的~
看目标人群,如果以前用 c 不停 malloc, free 内存。用了 go 之后感觉真爽。。。很多函数名和系统调用相同, 也会有一种新切感。
想问一下两位平时开发.NET Core 都是用的什么 IDE 呢?
valng 不就是 c 的语法糖么?现在改进了?最开始看的时候就是转成 c,还有用字符 串替换的方法转,
反正都是写网页考虑下 php?
反正加个 nginx 就能跑
第三方库也多,写法看个人意愿
从原生到复杂的框架都能写
(其实 go 的工资高,反正都是面向工资编程为啥不用)
我觉得这么一个道理: 使用相同的时间成本和学习成本, Go 的收益更大.
热烈欢迎 LZ 把我的慕课网课程买走学习, 贼好的课程.
裸跑 gunicorn,static 静态文件放哪里的?都走 cdn 吗?
--------
Python 项目部署也是可以递进的。最原始就是直接纯裸跑,高级一点套个 uwsgi/gunicorn,再高级一点前面套 nginx,再高级一点前面套负载均衡,后面分布式数据库。这四层套下来,什么并发都不是事啦
说的对,用 python 太简单了,不利于增加码农的薪资水平
有 IDE ?
大企业用 go 是为了省钱;小企业用 go 是为了起哄。
为什么不问 Rust 有什么优势? 不配有姓名吗
开发不仅仅只有 web 开发,多扩展知识面吧。
多了解了解基础设施的设计开发,不要将眼光和思维局限在接口开发
#63
1. 水平不足就不写并发代码了?水平不足就可以不解决性能了?不止一次见到有人以水平不足去怪一项技术垃圾了。
2. 即使 Java 的热部署也是有要求的,不是所有更新都能够热部署,以前巨石架构用热部署还情有可原。都 9102 年了,微服务都快淘汰了,还不知道蓝绿部署,滚动发布。go 编写服务,配合容器化+k8s 编排,发布是很轻松的事情。
- 强类型
- 并发便捷且轻量
- 部署方便,依赖管理
ORM 不是全部工作内容,倾向于手写语句。Docker 引入一个更大的问题,容器化不比换语言简单。正如 Python 在科学计算届的火热,Golang 在容器化和 K8s 的背景下也得到长足发展。
> 做接口后端
取决于开发者本人,熟悉什么用什么。两边差距达不到质变。
脚本语言和编译语言,各有千秋,脚本语言要不是开发效率快,要他何用,编译语言要不是运行性能高,要他何用!
用编译语言来和脚本语言比开发效率,天生不足,反之亦然。
等到将来那一天 python 等那些脚本语言都绝迹了,
部署真的很烦人
省钱
以前要堆机器(物质资源)才能解决的事,现在换个会某编程语言的人(劳力资源) 就解决了。便宜资源 换 贵资源,达到同样效果
最好的是 visual studio,非常非常好用,次之就是 vscode
就 py 那个打少一个空格就出错、网上复制代码经常乱格式的设定,我说 perl5 都不会灭绝,何况 php、ruby,别忘了微软的古怪 powershell 可以引用.net 对象
对啊, 管他那么多,面向工资编程就完事了
说得对
就三个字 go 最重要的就是云原生 看到没人提
1,一次开发,交叉编译,到处使用。( windows,linux,arm,物联网 )
2,没有魔法( Python 有多少让你惊奇,仍不住叫 WTF 的)
3,性能好(原生协程,编译速度快)
4,社区开源产品丰富( package 数目,GIT 开源项目数目上,除了 npm,pip,go 应该快赶上 composer 了)
5,背靠 GOOGLE,官方包质量高(相比 python 的 HTML 解析包你就得学 4 个)
看看 Github 上得 package star 排行,我认为 go 高质量库已经超过 Python 了。
Why?
说个与贴子主题无关的:vert.x+kotlin
go is god,30 分钟 5 万!(指同等逻辑下 java 的代码字数)
单纯是逃不开,最近学 docker,k8s,顺手学了 golang,生态在这里的。
本来打算换 go,看完各位的回答,我还是坚持 python, 因为我的网站,瓶颈应该在数据库上,而不是并发上, 等哪天我有 10w 并发 在考虑换 go
"看看 Github 上得 package star 排行,我认为 go 高质量库已经超过 Python 了。"
这个在哪里看?
我觉得有 2k 并发都可以换了 golang,但是直连数据库 2k 并发有点难呀
纯 python 100 并发 P99 就很难看了,再加 GIL,你就信那些吹 python 的嘛。再加 GIL 额外进程消耗,几百的时候你就要开始折腾优化。这功夫下来 go 版本瞎写都几千 qps。
这种东西只有自己用过才能体会到吧。。
围观一下
1、go 简单(但不简陋)
2、go 中协程序是轻量级的线程(占用资源少),同等性能的服务器中可以并发更多的处理单元。
把一部分工作交给编译器, 这是很好的.
就算瓶颈在数据库上,跟并发一点关系也没有,那也是 go 更快。
如果只是 crud 的业务,go 没啥明显优势,看看 go 的明星项目,都是容器,网络中间件相关的,
比底层操作系统上层一些的领域是 golang 主场
go 的优势只有 docker 吧
Golang(Go语言)的优势主要体现在以下几个方面:
- 学习曲线平缓:Go语言语法简单直观,上手快,尤其适合有其他编程语言背景的开发者。
- 高效性能:Go语言结合了编译型语言的高性能和解释型语言的开发效率,编译速度快,执行效率高,特别适合高并发、大规模数据处理等场景。
- 强大并发支持:通过goroutine和channel提供了强大的并发编程模型,使得并发编程变得简单且高效,能够充分利用多核处理器的优势。
- 内存管理安全:内置垃圾回收机制,自动管理内存分配和回收,减少了内存泄漏和内存溢出的风险。
- 标准库丰富:Go语言自带了一个强大的标准库,涵盖了网络编程、文件操作、字符串处理、并发控制等各个方面,满足了大多数开发需求。
- 跨平台兼容:Go语言代码可编译为多个平台,包括Windows、Linux、macOS等,具有很强的跨平台支持。
- 工具链完善:Go语言提供了一套强大的工具链,包括编译器、调试器、测试工具和性能分析工具等,有助于开发者更高效地进行代码编译、调试、测试和优化。
综上所述,Go语言以其高效性能、强大并发支持、内存管理安全、丰富标准库、跨平台兼容和完善工具链等优势,在IT领域得到了广泛应用。