为什么要学习Golang?

Python013

为什么要学习Golang?,第1张

Go语言其实是Golanguage的简称,Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译并发型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。该语言的吉祥物为金花鼠(gordon),

金花鼠(gordon)

Go 语言特色——简洁、快速、安全、并行、有趣、开源、内存管理、数组安全、编译迅速

Go 语言用途:Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

C/C++的问题:开发效率低,对开发者要求高;libc只向后兼容,运维难度偏大。

Lua/Python的问题:动态语言,缺少编译过程,低级错误频出;缺少有效的性能分析及调试工具。

链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。

CDA数据分析师 出品

编译:Mika

如果我们把人类文明想象成汽车的话,那么软件开发行业就相当于汽车的引擎,编程语言就像引擎的燃料。

2021年很快就要结束了。如今,软件开发行业正以前所未有的速度在全球蓬勃发展。在不久的将来,该行业在全球收入预计将超过3000亿美元。

在越来越多的行业,拥有数据思维能力,会编程语言也变得日益重要,能够编写计算机程序也成为了当下最值得学习的技能之一。

在数字经济的新形势下,跟随技术潮流的发展来学习新技术是十分必要的。2022年,你有计划新学一门编程语言吗?

在本文中我们列出了2022年值得学习的编程语言TOP 7,一起来看看吧。

01 Python

确切地说,Python是目前世界上最流行的编程语言,而且热度一直很高。

统计数据显示,Python在几个主要的语言排名指数中一直名列前茅排。这也使其成为开发者的首选语言之一,也是企业使用语言的首要选择。

无论是安卓或iOS应用开发,还是构建桌面应用,企业如今会雇用专门使用Python的开发人员。这也是意料之中的,因为Python有许多优势,而且它是一种顶级的通用语言。

Python最大的优势在于它相对容易学习,而且还加快了开发时间,这也是为什么企业机构如此喜欢Python的原因。同时对于作为开发人员来说,Python还具有开源的优势,并且在线社区非常活跃,这意味着你可以随时得到指导和支持。

正由于Python如此流行,该领域并不缺乏人才,但这并不意味着你不应该学习这种全堆栈语言。这里要注意一下,Python可能比Kotlin等其他语言速度慢,而且它不是移动设备的原生语言,可能会导致应用程序内存消耗高。

02 Kotlin

学习Kotlin的一大亮点在于,谷歌很喜欢使用该语言。事实上,自2017年以来,Kotlin一直是谷歌的首选软件开发语言。

谷歌优先考虑基于Kotlin的应用程序的创新特性和功能,开发者只需用这种易于使用的语言编写代码,就可以轻松地在竞争中保持领先。最重要的是,你可以使用Kotlin作为WordPress编程实践,构建WP网站或开发android应用程序、服务器等。而且只要是使用Java的地方,你都可以使用Kotlin,因为它与这种流行的语言是互通的。

还值得注意的是,Kotlin很可靠,其应用程序的源代码很容易维护,语言本身也很干净和紧凑,这使得它相当容易学习。不用说,Kotlin也通过更好的团队协作和效率大大减少了开发时间。

03 JavaScript

在顶尖的编程语言中,不得不提JavaScript,它已成为桌面软件、基于web的应用程序甚至手机应用程序的标杆性语言。

你现在可能会想,为了成为一名优秀的的开发者,你需要学习本文中提到的所有语言,事实上你掌握的语言越多,这越有利于你的职业发展。

要知道,如今开发团队和公司一般都倾向于招募具有多项技能的开发人员,JavaScript能让你如虎添翼。JavaScript的优势在于,你几乎可以用这种语言编写任何代码。而且它在电子商务行业中特别流行,用于编写运输应用程序以及其他后端以客户为中心的应用程序。

所有这些都表明,学习JavaScript是一项非常有价值的技能。它的优势在于速度性、多功能性和可靠性。同时JavaScript流行度很高,由于有巨大的在线社区,这也让其易于学习。

04 C++

经过多年的发展,C++已经成为一种用于分析和研究目的的编程语言,现在它是游戏开发的主要语言之一。这是因为C++是世界上最流行的游戏引擎——虚幻引擎(Unreal Engine)的主要脚本语言。

如果你想在2022年成为游戏行业一个有竞争力的开发者,不妨学一学C++。该语言对于系统软件开发,以及将项目管理方法集成到PM应用程序和企业专有软件中非常有用。同时,C++还支持面向对象编程以及多种其他编程模式,这使C++具有高度的通用性,而且也比其他一些编程语言更容易学习。

在使用C++时,唯一麻烦的是没有自动垃圾回收器,这意味着你需要手工清除无用数据。内置的friends函数和全局变量可能会带来一些安全风险,你可以通过管理访问点来避免这些风险。

05 Golang

Golang最早出现在2009年,但它被认为是一种相当新的语言。近年来,无论是在前端还是后端,Golang都在开发社区掀起了一波浪潮。

Golang是由谷歌推出的,主要目的是将推进函数式编程的发展,它具有许多C语言应有的功能,比如包括垃圾收集器、更好的内存安全性和管理、结构类型等等。

对于要处理敏感信息的的软件来说,Golang是非常不错的选择。例如中小企业的计费软件以及需要强大工具来管理金融交易和数据的大型企业。不过,Golang学习起来要花费的时间精力更多,但对于有抱负的开发人员来说,如果未来想从事web和应用程序开发,那么这个语言是很值得学习的。

同时,它还是开源的,因此你有很多机会可以相当快地掌握这种语言。如今的企业和用户都需要简单而直观的应用程序,Golang在代码效率、简单性和安全性的优势就显得十分重要了。

06 Dart

在谷歌开发的新式编程语言中,Dart作为一种简单的编码语言在业界迅速崛起,它遵循C风格的语法。这意味着它相当容易学习,而且它在多平台和跨平台开发中有着广泛的应用。

作为软件开发者,你需要一种可以用于为各种平台编写应用程序的语言。

就拿可穿戴设备来说,如今可穿戴设备在许多方面改变了我们的生活,而且必须与其他设备连接,因此你得确保这些设备在不同平台的应用中的无缝操作。这里Dart就能派上用场了,你可以Dart为任何电子设备构建应用程序。

学习Dart并不是必须的,但它确实比学习JavaScript这类传统语言有一些优势。Dart更容易学习,语法更简单,尤其是在快速开发和输出成为常态的时代,这是十分珍贵的特质。

07 Solar 2D

最后,Solar 2D(前身为Corona)是专门为开发手机游戏而构建的软件开发工具包。考虑到手机游戏日益流行的事实,到2022年仅在美国,手机游戏内容市场的价值就将超过1210亿美元。

考虑到这一点,Solar 2D正是移动游戏行业中必不可少的编程工具包。Solar 2D目前只是基于2D,但这并不是问题,因为在安卓和iOS游戏中2D应用程序的表现也十分亮眼。Solar 2D的伟大之处在于它使用了强大的Lua脚本语言,并在魔兽、愤怒的小鸟和文明等游戏中广为使用。

使用Go 语言开发大型 MMORPG 游戏伺服器怎么样

如果是大型网路游戏的话,我觉得是不合适的。现阶段go语言的执行效率还是太低了。在底层编译器的优化方面做得和c++相比还是差了不少。go语言也是比较适合快速开发的专案比较合适

从2013年起,经朋友推荐开始用Golang编写游戏登陆伺服器, 配合C++做第三方平台验证. 到编写独立工具导表工具GitHub - davyxu/tabtoy: 跨平台的高效能便捷电子表格汇出器. 以及网路库GitHub - davyxu/cell: 简单,方便,高效的Go语言的游戏伺服器底层. 最终使用这些工具及库编写整个游戏伺服器框架, 我的感受是很不错的

细节看来, 有如下的几个点:

语言, 库

Golang语言特性和C很像, 简单, 一张A4纸就能写完所有特性. 你想想看, C++到了领悟阶段, 也只用那几个简单特性, 剩下的都是一大堆解决各种记忆体问题的技巧. 而Golang一开始就简单, 何必浪费生命去研究那一大堆的奇技淫巧呢?

Golang的坑只有2个:1. interface{}和nil配合使用, 2. for回圈时, 将回圈变数引入闭包(Golang, Lua, C#闭包变数捕获差异) 完全不影响正常使用, 复合语言概念, 只是看官方后面怎么有效的避免

用Golang就忘记继承那套东西, 用组合+介面

用Golang伺服器如何保证解决游戏伺服器存档一致性问题? s the world是肯定的, 但是Golang可以从语言层并发序列化玩家资料, 再通过后台存档

channel是goroutine虽然是Golang的语言特性. 但是在编写伺服器时, 其实只有底层用的比较多.

Golang的第三方库简直多如牛毛, 好的也很多

不要说模板了, C#的也不好用, 官方在纠结也不要加, 使用中, 没模板确实有点不方便. 用interface{}/反射做泛型对于Golang这种强型别语言来说,还是有点打脸

执行期

Golang和C++比效能的话, 这是C++的优势, Golang因为没虚拟机器, 只有薄薄的一层排程层. 因此效能是非常高的, 用一点效能牺牲换开发效率, 妥妥的

1.6版后的GC优化的已经很好了, 如果你不是高效能,高并发Web应用, 非要找出一堆的优化技巧的话. 只用Golang写点游戏伺服器, 那点GC损耗可以忽略不计

和其他现代语言一样, 崩溃捕捉是标配功能, 我用Golang的伺服器线上跑, 基本没碰到过崩溃情况

热更新: 官方已经有plugin系统的提交, 跨平台的. 估计很快就可以告别手动cgo做so热更新

开发, 除错, 部署, 优化

LiteIDE是我首选的Golang的IDE, 虽然有童鞋说B格不高. 但这估计实在是找不到缺点说了, 别跟我说Visual Studio, 那是宇宙级的...

曾经听说有人不看好Golang, 我问为啥: 说这么新的语言, 不好招人,后面打听到他是个策划... 好吧

真实情况是这样的: Golang对于有点程式设计基础的新人来说, 1周左右可以开始贡献程式码. 老司机2~3天.

开发效率还是不错的, 一般大的游戏功能, 2*2人一周3~4个整完. 这换C++时代, 大概也就1~2个还写不完. 对接伺服器sdk的话, 大概1天接个10多个没问题

Golang自带效能调优工具, 从记忆体, CPU, 阻塞点等几个方面直接出图进行分析, 非常直观, 可以参考我部落格几年前的分析: 使用Golang进行效能分析(Profiling)

Golang支 *** 叉编译, 跨平台部署, 什么概念? linux是吧? 不问你什么版本, 直接windows上编译输出一个elf, 甩到伺服器上开跑.不超过1分钟时间..

1.为什么golang的开发效率高?

golang是一编译型的强型别语言,它在开发上的高效率主要来自于后发优势,不用考虑旧有恶心的历史,又有一个较高的工程视角。良好的避免了程式设计师因为“ { 需不需要独占一行 ”这种革命问题打架,也解决了一部分趁编译时间找产品妹妹搭讪的阶级敌人。

它有自己的包管理机制,工具链成熟,从开发、除错到释出都很简单方便;

有反向介面、defer、coroutine等大量的syntactic sugar;

编译速度快,因为是强型别语言又有gc,只要通过编译,非业务毛病就很少了;

它在语法级别上支援了goroutine,这是大家说到最多的内容,这里重点提一下。首先,coroutine并不稀罕,语言并不能超越硬体、作业系统实现神乎其神的功能。golang可以做到事情,其他语言也可以做到,譬如c++,在boost库里面自己就有的coroutine实现(当然用起来跟其他boost库一样恶心)。golang做的事情,是把这一套东西的使用过程简化了,并且提供了一套channel的通讯模式,使得程式设计师可以忽略诸如死锁等问题。

goroutine的目的是描述并发程式设计模型。并发与并行不同,它并不需要多核的硬体支援,它不是一种物理执行状态,而是一种程式逻辑流程。它的主要目的不是利用多核提高执行效率,而是提供一种更容易理解、不容易出错的语言来描述问题。

实际上golang预设就是执行在单OS程序上面的,通过指定环境变数GOMAXPROCS才能转身跑在多OS程序上面。有人提到了网易的pomelo,开源本来是一件很不错的事情,但是基于自己对callback hell的偏见,我一直持有这种态度:敢用nodejs写大规模游戏伺服器的人,都是真正的勇士 : ) 。

2、Erlang与Golang的coroutine有啥区别,coroutine是啥?

coroutine本质上是语言开发者自己实现的、处于user space内的执行绪,无论是erlang、还是golang都是这样。需要解决没有时钟中断;碰著阻塞式i\o,整个程序都会被作业系统主动挂起;需要自己拥有排程控制能力(放在并行环境下面还是挺麻烦的一件事)等等问题。那为啥要废老大的劲自己做一套执行绪放user space里面呢?

并发是伺服器语言必须要解决的问题;

system space的程序还有执行绪排程都太慢了、占用的空间也太大了。

把执行绪放到user space的可以避免了陷入system call进行上下文切换以及高速缓冲更新,执行绪本身以及切换等操作可以做得非常的轻量。这也就是golang这类语言反复提及的超高并发能力,分分钟给你开上几千个执行绪不费力。

不同的是,golang的并发排程在i/o等易发阻塞的时候才会发生,一般是内封在库函式内;erlang则更夸张,对每个coroutine维持一个计数器,常用语句都会导致这个计数器进行reduction,一旦到点,立即切换排程函式。

中断介入程度的不同,导致erlang看上去拥有了preemptive scheduling的能力,而golang则是cooperative shceduling的。golang一旦写出纯计算死回圈,程序内所有会话必死无疑;要有大计算量少i\o的函式还得自己主动叫runtime.Sched()来进行排程切换。

3、golang的执行效率怎么样?

我是相当反感所谓的ping\pong式benchmark,执行效率需要放到具体的工作环境下面考虑。

首先,它再快也是快不过c的,毕竟底下做了那么多工作,又有排程,又有gc什么的。那为什么在那些benchmark里面,golang、nodejs、erlang的响应效率看上去那么优秀呢,响应快,并发强?并发能力强的原因上面已经提到了,响应快是因为大量非阻塞式i\o操作出现的原因。这一点c也可以做到,并且能力更强,但是得多写不少优质程式码。

然后,针对游戏伺服器这种高实时性的执行环境,GC所造成的跳帧问题确实比较麻烦,前面的大神 @达达 有比较详细的论述和缓解方案,就不累述了 。随着golang的持续开发,相信应该会有非常大的改进。一是遮蔽记忆体操作是现代语言的大势所趋,它肯定是需要被实现的;二是GC演算法已经相当的成熟,效率勉勉强强过得去;三是可以通过incremental的操作来均摊cpu消耗。

用这一点点效率损失换取一个更高的生产能力是不是值得呢?我觉得是值得的,硬体已经很便宜了,人生苦短,让自己的生活更轻松一点吧: )。

4、基于以上的论述,我认为采用go进行小范围的MMORPG开发是可行的。

如果跟C语言比,大部分指令码都胜出啊。Go, Node.js, Python ......

网易弄过一个Node.js的开源伺服器框架。

至于IDE, 不重要,做伺服器开发很少会要开着IDE除错的。最常用的手段就是打Log. 设定了断点也很难调,多个客户端并发。

那种单客户端连线进来就可以重现的bug倒是可以用IDE调,但是这种bug本来就容易解决。

用指令码语言,有一个很大的好处是容易做自动测试,可以更好地保证程式码质量。

--------------------------

开发效率当然是指令码高。执行效率,其实更重要的是并发,框架合理的话增加机器就可以直接提高效率增加人数。

用Go开发大型mmorpg服务端不会有问题的,如果掉坑里肯定不会是语言的问题。

唯一比较可能掉进去的坑就只有GC,其实很容易预防和调整的,具体细节可以看我部落格分享的文章。

但是技术选型不只是选语言,如果当时我手头有一套效能满意,开发效率OK,人员补给不会有问题的技术方案,不管是什么语言的,我肯定不会放弃它而选择冒险的。

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==xinjian)

{

text.setText("")

}

if(e.getSource()==dakai)

{

openFD.show()

String s