文档章节

我看go语言

崔钢
 崔钢
发布于 2017/10/26 18:59
字数 1214
阅读 38
收藏 1

现在的编程语言有很多,但是能生存下来的,基本上都有一些自己的绝活,或者亮点。其实我真正熟悉的编程语言也并不多。java是我最为熟悉的,是我入门的编程语言。java足够简单,有丰富的特性,但是java也有自己的缺点,就是比较啰嗦,过于学院派。而且java虚拟机本身技术含量很高,难度也很大,很复杂。复杂意味着它的行为是难以预测的,这对编程来说不是好事,虽然90%的情况下我们不需要关注java虚拟机干了什么事情。

go是一门很有特色的语言。虽然我到目前为止基本没有怎么使用过go干过任何一件事情。但资料我却看了不少。我认为现在go语言已经完全成熟了,可以应用在工业领域了。go语言有非常多的优点,当然也有缺点,但是我觉得相比起来,其优点似乎更醒目一些。

go语言不是面向对象的语言,没有类,没有继承。虽然有接口以及类型。但是你也没有办法使用面向对象的那一套思维或者方法来设计程序。因此它也没有泛型,模板什么的。因为在我看来,泛型这样的技术,只有在抽象的系统中,才有更大的作用。而在容器(集合类)技术中,泛型的意义并不大,容器指定的所谓类型,其实是无关紧要的。早期的java并不支持泛型,其各种容器类比如list,hashmap也使用的很好。面向对象的语言需要泛型支持,是因为很多面向对象语言比如java,c++都是静态类型的,类型自然也是需要抽象的,所依类型的抽象很重要,于是就有了泛型。但是go语言并没有类这个层次的抽象,特别是,也没有继承的机制。当然,go语言的结构体和方法有很多种玩法,可以通过组合的方式来达到一些继承的特色,但完全不是继承。我不觉得把结构体搞得那么的复杂有多好。

go语言也不是函数式的语言。看起来大多数函数都有副作用,当然,你也可以写完全没有副作用的函数。同时go语言也支持闭包以及把函数作为参数传递。函数虽然在go语言中地位不低,但是没有惰性求值,柯里变换(Currying)。当然我对函数式编程这种技术理解的可能也不太全面,大多数的知识都来自于scala这门语言。我当然也不是什么学院派的,知识底蕴还是不足。我是工程派,在我看来知识和技能都是为了解决问题而存在的,能解决问题的知识与技能才是好的知识与技能。 看起来,go很实用,不追求那些学院派的做法。它并不打算给自己搞一个什么理论的支持。这一点其实很好,完全是工程师的视角,一切实用至上。

go语言是编译型静态类型指令式语言,支持类型推导。它编译速度比较快,同时支持解释方式运行。它工具链十分的健全,甚至连格式化工具都有。唯一缺憾是没有一个官方的包管理工具,不过第三方的包管理工具很多。此外golang采用了垃圾回收技术(GC),但是没有使用虚拟机来实现,而是将其打包在了编译结果中,这导致了golang编译出来的东西个头比较大。而且有GC停顿的问题。很多人都批判了这一点。关于golang的GC我也没怎么研究过,但是我觉得GC停顿对有些系统是致命的,但是对有些系统,特别是基于web的业务系统,其实影响并不大。

golang支持多核CPU,并发的时候既支持协程,也支持线程。我们都知道协程性能比线程好不少,因为golang同时支持协程与线程,又能够在一个进程上面利用多核CPU并发工作,所以golang的并发性能是很强的。此外golang的并发模型与elang的actor很相似,采用了channel的方式,在多个协程之间通讯,用这种技术来实现并发的控制。这种并发控制方式比共享内存加锁的方式要高效,而且也很容易理解。

© 著作权归作者所有

共有 人打赏支持
崔钢
粉丝 171
博文 99
码字总数 59953
作品 0
西安
高级程序员
私信 提问
go语言文件汇总

归并排序及go语言实现 堆排序算法及go语言实现 Go语言基础学习(一)变量 【Leetcode】:Counting Bits问题 in Go语言 基于go语言的心跳响应 【Leetcode】:Single Number III问题 in Go语言 ...

d_watson
2016/04/15
127
2
ABBYY FineReader 12 识别文档语言有哪些

ABBYY FineReader可以识别单语言文本和多语言文本(如使用两种及以上语言)。对于多语言文本,需要选择多种识别语言。 要为文本指定一种 OCR 语言,请从主工具栏或任务窗口的文档语言下拉列表...

ABBYY
2016/08/05
1
0
ABBYY FineReader 12如何识别多语言文本

ABBYY FineReader 12这款OCR文字识别软件可以识别单语言文本和多语言文本(如使用两种及以上语言),对于多语言文本,需要选择多种识别语言,那么在ABBYY FineReader 中该如何实现呢? 若有疑...

ABBYY
2015/11/12
0
0
复制:程序学习书单

原址:http://www.cnblogs.com/figure9/p/developer-reading-list.html 3. 编程语言理论 1《编程语言实现模式》 大多数程序员并不需要从头编写一个编译器或解释器,因此龙书(编译原理)就显得...

zhchl2010
2016/05/26
83
0
你真的需要掌握多种编程语言吗?

简述 我刚刚断送了自己的职业生涯,没错,很多人都这样对我说。 同事得知我即将离开公司的消息,大多数对此表示理解。但让他们困惑的是,我目前就职的公司是一家Windows商店,用C#.net编写代...

u011012932
2016/08/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JVM-----java内存区域与java内存模型

一.java内存区域 jvm在执行java程序的过程中会把所管理的内存分为若干不同的区域,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁的。 以下是java运...

Carol998
52分钟前
3
0
小白用Python玩爬虫,必须了解的一个爬虫流程!

爬虫基本流程 发起请求 通过HTTP库向目标服务器发送Request,Request内可以包含额外的headers信息。 获取响应内容 如果服务器正常响应,会返回Response, 里面包含的就是该页面的内容。 解析...

糖宝lsh
58分钟前
3
0
Docker之安装Harbor镜像仓库

我本机的IP是172.xx.x.x,装了一个ubuntu18的虚拟机(虚拟机的IP是192.168.33.5),下文中使用的Docker版本都是17.12。我本地使用的开发环境是Ubuntu18,在本机和虚拟机上都要安装Docker,安装...

克虏伯
今天
2
0
关于iOS中yy_model解析

这个,算是个总结吧, 之前基本上用的都是mj,不过都差不多 // json转模型+ (instancetype)yy_modelWithJSON:(id)json; // 模型转字符串- (NSString *)yy_modelToJSONString /...

RainOrz
今天
2
0
OpenSSL::SSL::SSLError: hostname "file.api.weixin.qq.com" does not match the server certificate

Rails在使用 rest-client 会出现ssl的问题,已rest-client =1.8.0 版本为例默认使用了系统的CA验证, 服务器环境 : Ruby2.1.1 Rest-client-1.6.8 OpenSSL 1.0.2 如果在服务器环境下其他项目...

mingle
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部