① 保留但大幅度简化指针
Go语言保留着C中值和指针的区别,但是对于指针繁琐用法进行了大量的简化,引入引用的概念.所以在Go语言中,你几乎不用担心会因为直接操作内寸而引起各式各样的错误.
还记得在C里面为了回馈多个参数,不得不开辟几段指针传到目标函数中让其操作么?在Go里面这是完全不必要的.而且多参数的支持让Go无需使用繁琐的exceptions体系,一个函数可以返回期待的返回值加上error,调用函数后立刻处理错误信息,清晰明了.
如果你习惯了Python中简洁的list和dict操作,在Go语言中,你不会感到孤单.一切都是那么熟悉,而且更加高效.如果你是C++程序员,你会发现你又找到了STL的vector 和 map这对朋友.
Go语言最让人赞叹不易的特性,就是interface的设计.任何数据结构,只要实现了interface所定义的函数,自动就implement了这个interface,没有像Java那样冗长的class申明,提供了灵活太多的设计度和OO抽象度,让你的代码也非常干净.千万不要以为你习惯了Java那种一条一条加implements的方式,感觉还行,等接口的设计越来越复杂的时候,无数Bug正在后面等着你.
同时,正因为如此,Go语言的interface可以用来表示任何generic的东西,比如一个空的interface,可以是string可以是int,可以是任何数据类型,因为这些数据类型都不需要实现任何函数,自然就满足空interface的定义了.加上Go语言的type assertion,可以提供一般动态语言才有的duck typing特性, 而仍然能在compile中捕捉明显的错误.
Go语言本质上不是面向对象语言,它还是过程化的.但是,在Go语言中, 你可以很轻易的做大部分你在别的OO语言中能做的事,用更简单清晰的逻辑.是的,今天这一节,不需要class,仍然可以继承,仍然可以多态,但是速度却快得多.因为本质上,OO在Go语言中,就是普通的struct操作.
这个几乎算是Go语言的招牌特性之一了,我也不想多提.如果你完全不了解Goroutine,那么你只需要知道,这玩意是超级轻量级的类似线程的东西,但通过它,你不需要复杂的线程操作锁操作,不需要care调度,就能玩转基本的并行程序.在Go语言里,触发一个routine和erlang spawn一样简单.基本上要掌握Go语言,以Goroutine和channel为核心的内存模型是必须要懂的.不过请放心,真的非常简单.
和C比较,Go语言完全就是一门现代化语言,原生支持的Unicode, garbage collection, Closures(是的,和functional programming language类似), function是first class object,等等等等.
看到这里,你可能会发现,我用了很多轻易,简单,快速之类的形容词来形容Go语言的特点.我想说的是,一点都不夸张,连Go语言的入门学习到提高,都比别的语言门槛低太多太多.在大部分人都有C的背景的时代,对于Go语言,从入门到能够上手做项目,最多不过半个月.Go语言给人的感觉就是太直接了,什么都直接,读源代码直接,写自己的代码也直接.
google由于众所周知的原因,在国内程序员中不一般的地位.golang有个好背景.
go语言之前一直都没有接受待见,如今广大的群众开始接待,因为腾讯服务器段代码编译是支持go语言的
go语言会成为主流也是一个问题,
多虑了,没有竞争来关系.
虽然go成为源了世界上最并发的语言,这并不妨碍php成为世界上最好的语言,
也不妨碍java成为世界上最有模式的语言,
其实并没有不受待见,用的人还是很多的,解决一些特定领域的问题也很方便.
每种语言的流行程度主要取决于这个语言最著名的killerapp的流行程度,C有Linux,Go有Docker.
个人认为:
①.、上手快
只要你有其会其他语言,学习go很快.
因为它开源,所以很容易找到你想要的框架,开发效率非常高.
你的一个程序可以随意部署.
不受操作系统限制,windwos、linux、macos都能支持.
编译成一个文件就可以发布了,不需要环境支撑.
好了,全部的最基本的理由,当然这些对于.net core来说也一样,但是对比一下发布的文件大小你就知道该选择谁了.
很多朋友可能知道Go语言的优势在哪,却不知道Go语言适合用于哪些地方.
①.0、 Tsuru:开源的PAAS平台,和SAE实现的功能一模一样.
以上的就是关于go语言能做什么的内容介绍了.
①.、简单易学.
Go语言天生支持并发,可以充分利用多核,轻松地使用并发. 这是Go语言最大的特点.
描述
Go的语法接近C语言,但对于变量的声明有所不同.Go支持垃圾回收功能.Go的并行模型是以东尼-霍尔的通信顺序进程(CSP)为基础,采取类似模型的其他语言包括Occam和Limbo,但它也具有Pi运算的特征,比如通道传输.
与C++相比,Go并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能,但增加了 切片(Slice) 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持.
细节看来, 有如下的几个点:
语言, 库
用Golang就忘记继承那套东西, 用组合+接口
用Golang服务器如何保证解决游戏服务器存盘一致性问题? stop the world是肯定的, 但是Golang可以从语言层并发序列化粉丝数据, 再通过后台存盘
channel是goroutine虽然是Golang的语言特性. 但是在编写服务器时, 其实只有底层用的比较多.
Golang的第三方库简直多如牛毛, 好的也很多
不要说模板了, C#的也不好用, 官方在纠结也不要加, 使用中, 没模板确实有点不方便. 用interface{}/反射做泛型对于Golang这种强类型语言来说,还是有点打脸
运行期
Golang和C++比性能的话, 这是C++的优势, Golang因为没虚拟机, 只有薄薄的一层调度层. 所以呢性能是非常高的, 用一点性能牺牲换开发效率, 妥妥的
和其他现代语言一样, 崩溃捕捉是标配功能, 我用Golang的服务器线上跑, 基本没碰到过崩溃情况
热更新: 官方已经有plugin系统的提交, 跨平台的. 估计很快就可以告别手动cgo做so热更新
开发, 调试, 部署, 优化
LiteIDE是我首选的Golang的IDE, 虽然有童鞋说B格不高. 但这估计实在是找不到缺点说了, 别跟我说Visual Studio, 那是宇宙级的...
曾经听说有人不看好Golang, 我问为啥: 说这么新的语言, 不好招人,后面打听到他是个策划... 好吧
Golang自带性能调优工具, 从内存, CPU, 阻塞点等几个方面直接出图进行分析, 非常直观, 可以参考我博客几年前的分析: 使用Golang进行性能分析(Profiling)
Golang支持交叉编译, 跨平台部署, 什么概念? linux是吧? 不问你什么版本, 直接windows上编译输出一个elf, 甩到服务器上开跑.不超过1分钟时间..