
正文
go语言2022知乎 go语言前景如何 2020
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
go语言有前景吗?
就目前来看还是很有前景,因为越来越火了,不过他的应用领域还是局限在高并发处理和网站开发,毕竟是后起之秀所以在其他桌面程序领域没那么容易普及和超越c++,找工作就不推荐学go
相关问答
Q1: go语言的全称
Go全称Golang。
Go语言由Google公司开发,并于2009年开源,相比Java/Python/C等语言,Go尤其擅长并发编程,性能堪比C语言,开发效率肩比Python,被誉为“21世纪的C语言”。
Go语言在云计算、大数据、微服务、高并发领域应用应用非常广泛。BAT大厂正在把Go作为新项目开发的首选语言。
Q2: Go 语言的错误处理机制是一个优秀的设计吗
这个问题说来话长,我先表达一下我的观点,Go语言从语法层面提供区分错误和异常的机制是很好的做法,比自己用单个返回值做值判断要方便很多。
上面看到很多知乎大牛把异常和错误混在一起说,有认为Go没有异常机制的,有认为Go纯粹只有异常机制的,我觉得这些观点都太片面了。
具体对于错误和异常的讨论,我转发一下前阵子写的一篇日志抛砖引玉吧。
============================
最近连续遇到朋友问我项目里错误和异常管理的事情,之前也多次跟团队强调过错误和异常管理的一些概念,所以趁今天有动力就赶紧写一篇Go语言项目错误和异常管理的经验分享。
首先我们要理清:什么是错误、什么是异常、为什么需要管理。然后才是怎样管理。
错误和异常从语言机制上面讲,就是error和panic的区别,放到别的语言也一样,别的语言没有error类型,但是有错误码之类的,没有panic,但是有throw之类的。
在语言层面它们是两种概念,导致的是两种不同的结果。如果程序遇到错误不处理,那么可能进一步的产生业务上的错误,比如给用户多扣钱了,或者进一步产生了异常;如果程序遇到异常不处理,那么结果就是进程异常退出。
在项目里面是不是应该处理所有的错误情况和捕捉所有的异常呢?我只能说,你可以这么做,但是估计效果不会太好。我的理由是:
如果所有东西都处理和记录,那么重要信息可能被淹没在信息的海洋里。
不应该处理的错误被处理了,很容易导出BUG暴露不出来,直到出现更严重错误的时候才暴露出问题,到时候排查就很困难了,因为已经不是错误的第一现场。
所以错误和异常最好能按一定的规则进行分类和管理,在第一时间能暴露错误和还原现场。
对于错误处理,Erlang有一个很好的概念叫速错,就是有错误第一时间暴露它。我们的项目从Erlang到Go一直是沿用这一设计原则。但是应用这个原则的前提是先得区分错误和异常这两个概念。
错误和异常上面已经提到了,从语言机制层面比较容易区分它们,但是语言取决于人为,什么情况下用错误表达,什么情况下用异常表达,就得有一套规则,否则很容易出现全部靠异常来做错误处理的情况,似乎Java项目特别容易出现这样的设计。
这里我先假想有这样一个业务:游戏玩家通过购买按钮,用铜钱购买宝石。
在实现这个业务的时候,程序逻辑会进一步分化成客户端逻辑和服务端逻辑,客户端逻辑又进一步因为设计方式的不同分化成两种结构:胖客户端结构、瘦客户端结构。
胖客户端结构,有更多的本地数据和懂得更多的业务逻辑,所以在胖客户端结构的应用中,以上的业务会实现成这样:客户端检查缓存中的铜钱数量,铜钱数量足够的时候购买按钮为可用的亮起状态,用户点击购买按钮后客户端发送购买请求到服务端;服务端收到请求后校验用户的铜钱数量,如果铜钱数量不足就抛出异常,终止请求过程并断开客户端的连接,如果铜钱数量足够就进一步完成宝石购买过程,这里不继续描述正常过程。
因为正常的客户端是有一步数据校验的过程的,所以当服务端收到不合理的请求(铜钱不足以购买宝石)时,抛出异常比返回错误更为合理,因为这个请求只可能来自两种客户端:外挂或者有BUG的客户端。如果不通过抛出异常来终止业务过程和断开客户端连接,那么程序的错误就很难被第一时间发现,攻击行为也很难被发现。
我们再回头看瘦客户端结构的设计,瘦客户端不会存有太多状态数据和用户数据也不清楚业务逻辑,所以客户端的设计会是这样:用户点击购买按钮,客户端发送购买请求;服务端收到请求后检查铜钱数量,数量不足就返回数量不足的错误码,数量足够就继续完成业务并返回成功信息;客户端收到服务端的处理结果后,在界面上做出反映。
在这种结构下,铜钱不足就变成了业务逻辑范围内的一种失败情况,但不能提升为异常,否则铜钱不足的用户一点购买按钮都会出错掉线。
所以,异常和错误在不同程序结构下是互相转换的,我们没办法一句话的给所有类型所有结构的程序一个统一的异常和错误分类规则。
但是,异常和错误的分类是有迹可循的。比如上面提到的痩客户端结构,铜钱不足是业务逻辑范围内的一种失败情况,它属于业务错误,再比如程序逻辑上尝试请求某个URL,最多三次,重试三次的过程中请求失败是错误,重试到第三次,失败就被提升为异常了。
所以我们可以这样来归类异常和错误:不会终止程序逻辑运行的归类为错误,会终止程序逻辑运行的归类为异常。
因为错误不会终止逻辑运行,所以错误是逻辑的一部分,比如上面提到的瘦客户端结构,铜钱不足的错误就是业务逻辑处理过程中需要考虑和处理的一个逻辑分支。而异常就是那些不应该出现在业务逻辑中的东西,比如上面提到的胖客户端结构,铜钱不足已经不是业务逻辑需要考虑的一部分了,所以它应该是一个异常。
错误和异常的分类需要通过一定的思维训练来强化分类能力,就类似于面向对象的设计方式一样的,技术实现就摆在那边,但是要用好需要不断的思维训练不断的归类和总结,以上提到的归类方式希望可以作为一个参考,期待大家能发现更多更有效的归类方式。
接下来我们讲一下速错和Go语言里面怎么做到速错。
速错我最早接触是在做的时候就体验到的,当然跟Erlang的速错不完全一致,那时候也没有那么高大上的一个名字,但是对待异常的理念是一样的。
在.NET项目开发的时候,有经验的程序员都应该知道,不能随便re-throw,就是catch错误再抛出,原因是异常的第一现场会被破坏,堆栈跟踪信息会丢失,因为外部最后拿到异常的堆栈跟踪信息,是最后那次throw的异常的堆栈跟踪信息;其次,不能随便try catch,随便catch很容易导出异常暴露不出来,升级为更严重的业务漏洞。
到了Erlang时期,大家学到了速错概念,简单来讲就是:让它挂。只有挂了你才会第一时间知道错误,但是Erlang的挂,只是Erlang进程的异常退出,不会导致整个Erlang节点退出,所以它挂的影响层面比较低。
在Go语言项目中,虽然有类似Erlang进程的Goroutine,但是Goroutine如果panic了,并且没有recover,那么整个Go进程就会异常退出。所以我们在Go语言项目中要应用速错的设计理念,就要对Goroutine做一定的管理。
在我们的游戏服务端项目中,我把Goroutine按挂掉后的结果分为两类:1、挂掉后不影响其他业务或功能的;2、挂掉后业务就无法正常进行的。
第一类Goroutine典型的有:处理各个玩家请求的Goroutine,因为每个玩家连接各自有一个Goroutine,所以挂掉了只会影响单个玩家,不会影响整体业务进行。
第二类Goroutine典型的有:数据库同步用的Goroutine,如果它挂了,数据就无法同步到数据库,游戏如果继续运行下去只会导致数据回档,还不如让整个游戏都异常退出。
这样一分类,就可以比较清楚哪些Goroutine该做recover处理,哪些不该做recover处理了。
那么在做recover处理时,要怎样才能尽量保留第一现场来帮组开发者排查问题原因呢?我们项目中通常是会在最外层的recover中把错误和堆栈跟踪信息记进日志,同时把关键的业务信息,比如:用户ID、来源IP、请求数据等也一起记录进去。
为此,我们还特地设计了一个库,用来格式化输出堆栈跟踪信息和对象信息,项目地址:funny/debug · GitHub
通篇写下来发现比我预期的长很多,所以这里我做一下归纳总结,帮组大家理解这篇文章所要表达的:
错误和异常需要分类和管理,不能一概而论
错误和异常的分类可以以是否终止业务过程作为标准
错误是业务过程的一部分,异常不是
不要随便捕获异常,更不要随便捕获再重新抛出异常
Go语言项目需要把Goroutine分为两类,区别处理异常
在捕获到异常时,需要尽可能的保留第一现场的关键数据
以上仅为一家之言,抛砖引玉,希望对大家有所帮助。
Q3: 抓必死是什么开发语言
抓必死是什么开发语言博客园-开发者的网上家园
今天go语言2022知乎,我们来聊一聊测试人员想要进阶go语言2022知乎,想要做自动化测试,甚至测试开发,如何选择编程语言。前言 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件测试未来发展的趋势。...
博客园
swift语言 必死 现在iOS APP开发,用oc语言的多,还是swift语音的多?酷米网
这门快速发展的语言,很多实际场景无法有效实现功能,尤其是一些复杂的开发需求。另外,手机原生开发的一部分市场份额被H5开发技术所取代,而这种新的原生语言必然很难 1。Swift目前必须用Xcode...
酷米网
python3.0开发语言简介-程序员大本营
python3.0开发语言简介,程序员大本营,技术文章内容聚合第一站。
其他人还搜了
不能作为网页开发语言的是什么
开发手机游戏用什么语言
c语言适合开发什么
安卓系统版本开发语言是什么
学什么开发语言好学
学什么开发语言好就业
各种语言写网络爬虫有什么优点缺点?芝士回答
总之,如果开发一个小规模的爬虫脚本语言是个各方面比较有优势的语言。如果要开发一个复杂的爬虫系统可能 Java 是个增加选项,C++ 我感觉写个模块之类的更加适合。对于一个爬虫系统来说,下载和...
芝士回答2022-07-08
“阿里味”PUA 编程语言火上GitHub热榜,标星1.9K-编程之家
其实,这是一位国内程序员开发的 互联网黑话编程语言,英文名叫PUA Language。这个语言成功将两大部门员工对齐:非技术部门能 快速 掌握编程要领,程序员也能获得每天PPT汇报的快感。看到这么...
编程之家2022-10-15
游戏开发中常见的10种编程语言分别是什么-编程语言-亿速云
游戏开发是非常有经验和熟练的程序员的工作。它可能花费数亿美元。这是一项非常有创意的工作,也需要技术水平。他们需要具有特定需求的编程语言。以下是用于游戏开发的十大编程语言的列表。1、...
亿速云计算2022-01-11
python-编程语言-CSDN开发者互助问答社区_程序员有问必答-CSDN问答
问题遇到的现象和发生背景 各位好,我正在尝试用抓包,获取剑网3推栏的一些信息,但是目前,根据我获得的API,请求过去貌似还缺少一些参数。遇到的现象和发生背景,请写出第一个错误信息 缺少...
CSDN技术社区
十大受欢迎的编程语言go语言2022知乎你pick哪一个?腾讯新闻
甚至很多家长直接从娃娃抓起,几岁的小孩就开始去学编程!然而现在已有的计算机语言总数总计达9000多种,但是其实只有50种编程语言是较为流行的。在众多的编程语言中,究竟抱团前十的有哪些呢?...
腾讯网2020-07-30
编程语言里的网红 python语言有何优势-起航学习网
人工时代真的来了,为了我们下一代的教育,我们的未来应该从小开始抓起,python编程语言将融入低幼阶段,并逐步普及开来。文章出自: 文章...
起航学习网2018-07-08
各种语言写网络爬虫有什么优点缺点?
回答:26浏览:23万+赞同:10
[最佳答案]反对@Kenneth,他见过的爬虫太少了首先取决于目的如果是一个站点,单一目的,用习惯的语言写吧,学别的语言用的时间都够重构两遍的了。如果是有100左右的站点,做个框架,把go语言2022知乎你的爬虫管理起来,...
知乎2017-02-11
相关搜索
学什么开发语言好
学什么开发语言
现在学什么开发语言好
安卓开发语言
开发语言
c语言开发需要学什么
c语言开发环境
开发语言是什么
11-20条
Python开发语言的简介及优缺点-知乎
Python 简单易用,学习成本低,代码优雅干净清爽 Python 标准库和第三方库非常多,多到甚至有些恐怖,太多程序员为之添砖加瓦 Python功能强大,从网站 网抓 数据处理 科学计算 AI 运维都能干,...
知乎2022-07-28
该选择哪个语言开发爬虫?php教程-PHP中文网
我觉得不是说选择哪个语言,主要是看开发者对哪个语言最熟悉。如果是我的话,我会用 Node.js Node.js 有一个 Cheerio 库,用来解析 HTML 效率十分不错。它的 API 风格是类似 jQuery 的。啥都不...
php中文网2016-06-06
机器人研发十大热门编程语言:不死 Java、不朽 C/C+、新贵 Python_CSDN资讯的博客-CSDN博客_机器人编程
阅读:4w+
而回归本文主题,对于首选编程语言的选择,没有最佳的答案,但本文中,我们将介绍程序员在机器人编程中最流行的十大编程语言,并通过对比其优缺点,希望可以给予开发者提供一定的参考方向,做出...
CSDN技术社区2017-11-28
最适合青少年学习的编程语言 – Python-今日头条
高考政策出台在即,国家在抓信息技术教育,即使是今年高考也已经用到计算思维逻辑,未来人工智能必然会用到。10到16岁的孩子,大脑发育尚未完成,这段时间的学习会促进大脑神经元突触的生长以及...
今日头条2018-08-04
各种语言写网络爬虫有什么优点缺点
真正好的系统还包括完善的任务调度:dom.GAE 的支持,如果开发一个小规模的爬虫脚本语言是个各方面比较有优势的语言: 1,好的设计会节约大量的带宽和服务器资源,请求页面时会有较长的延迟,要...
搜狗问问2019-05-03
go语言_证券指标的博客-CSDN博客
背景 在接触Golang以前,我用C/C++、Lua及Python作为主要开发语言。C/C++的问题:开发效率低,对开发者要求高libc只向后兼容,运维难度偏大Lua/Python的问题:动态语言,缺少编译过程,低级错误...
CSDN技术社区2016-01-12
Go语言介绍-码农教程
这个不用多做介绍,作为开发Go语言的公司,当仁不让。Google基于Go有很多优秀的项目,比如: ,大家也可以在Github上 ...
码农网2021-10-01
黑客都使用什么编程语言?python|javascript_网易订阅
评论:73
他们的年龄在16到21岁,现已经释放,警方表示调查还在继续,但警方并未透露这位主谋是否被抓。与此同时,自称是欧洲最大的黑客协会Chaos计算机俱乐部做了一份调查,其目的是研究黑客们都使用...
手机网易网2022-03-29
“阿里味”PUA 编程语言火上GitHub热榜,标星1.9K!Wang_AI的博客-CSDN博客
其实,这是一位国内程序员开发的 互联网黑话编程语言,英文名叫PUA Language。这个语言成功将两大部门员工对齐:非技术部门能快速掌握编程要领,程序员也能获得每天PPT汇报的快感。看到这么有趣...
CSDN技术社区2022-01-08
这门语言将成为法国高中官方编程语言,微软也用它做脚本?
作为一种解释型语言,Python的设计哲学强调代码的可读性和简洁的语法。相比于C++或Java,Python让开发者能够用更少的代码表达想法。Python 或将成为法国高中的官方编程教学语言,这将带来...
美篇2018-12-01
相关搜索
学什么开发语言
学什么开发语言好
ai开发用什么语言
开发语言是什么
现在学什么开发语言好
linux开发用什么语言
cshop是什么开发语言
开发手机游戏用什么语言
gis开发用什么语言
windows开发的语言是什么
Q4: 有人学过GO语言么?和C++比、优缺点在那?
C++适合本地程序的开发。Go语言适合网络程序和本地程序的开发。Go的优点:垃圾回收,语意明确,格式统一。 Go的缺点:效率目前没有C++高,但对于桌面程序而言,效率问题不大,因为硬件已经很快了。c++过于复杂了,加入很多炫技的内容。这些内容脱离了事情的本质。
最明显的就是所谓的面向对象。基于面向对象的工程如果足够大的情况下,会带来很大的耦合度,如果再加上内存管理,多线程等等。项目后期基本上没办法维护和增加功能。
关于c++的语言复杂性,你可以问知乎上的任何一位高手。没一个敢说自己精通c++。你也可以去看一下所有的c++编绎器,没有任何一个敢说自己完全实现了c++的标准。不同的编绎器之间实现细节又不同。所以功能再强大没有实用性,就失去了意义,只会制造更多的问题。
Q5: go语言可以做什么
1、服务器编程:以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。
2、分布式系统、数据库代理器、中间件:例如Etcd。
3、网络编程:这一块目前应用最广,包括Web应用、API应用、下载应用,而且Go内置的net/http包基本上把我们平常用到的网络功能都实现了。
4、开发云平台:目前国外很多云平台在采用Go开发,我们所熟知的七牛云、华为云等等都有使用Go进行开发并且开源的成型的产品。
5、区块链:目前有一种说法,技术从业人员把Go语言称作为区块链行业的开发语言。如果大家学习区块链技术的话,就会发现现在有很多很多的区块链的系统和应用都是采用Go进行开发的,比如ehtereum是目前知名度最大的公链,再比如fabric是目前最知名的联盟链,两者都有go语言的版本,且go-ehtereum还是以太坊官方推荐的版本。
自1.0版发布以来,go语言引起了众多开发者的关注,并得到了广泛的应用。go语言简单、高效、并发的特点吸引了许多传统的语言开发人员,其数量也在不断增加。
使用 Go 语言开发的开源项目非常多。早期的 Go 语言开源项目只是通过 Go 语言与传统项目进行C语言库绑定实现,例如 Qt、Sqlite 等。
后期的很多项目都使用 Go 语言进行重新原生实现,这个过程相对于其他语言要简单一些,这也促成了大量使用 Go 语言原生开发项目的出现。
关于go语言2022知乎和go语言前景如何 2020的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






