提到Go语言渴望能很多人会觉得很陌生,就像Scala语言一样,是个小众语言,不被广泛认知,其实现在世界上有很多的机器语言,如果让我们都去一一掌握的话也不现实,毕竟人的时间和经历有限。前面也和大家聊过几种语言,比如Scala、python,C、C++等等。。。Java就不多说了,这几种语言都各自有各自的优劣,所以今天iuhe大家说下另一种语言Golang。
Go语言介绍
起初,Golang创造出来是为了来取代C++。最终,虽然不能如愿对C++取而代之,但是其近C的执行性能和近解析型语言的开发效率以及近乎于完美的编译速度,已经风靡全球。特别是在云项目中,大部分都使用了Golang来开发,不得不说,Golang早已深入人心。而对于一个没有历史负担的新项目,Golang或许就是个不二的选择。
很多人将GO语言称为21世纪的C语言,因为GO不仅拥有C的简洁和性能,而且还很好的提供了21世纪互联网环境下服务端开发的各种实用特性,让开发者在语言级别就可以方便的得到自己想要的东西。
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。
Go 语言用途
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
Go语言特性
- 简洁、快速、安全
- 并行、有趣、开源
- 内存管理、数组安全、编译迅速
1. 垃圾回收
- 内存自动回收,再也不需要开发人员管理内存
- 开发人员专注业务实现,不用分心兼顾其它
- 只需要new分配内存,不需要释放
2. goroute天然并发
- 从语言层面支持并发,非常简单;
使用一个go则在编译时会自动开启一个线程来执行后面的命令/函数/方法,不用像python需要先调用thread模块来开启线程 - goroute,轻量级线程,创建成千上万个goroute成为可能
- 基于CSP(Communicating Sequential Process)模型实现
3. goroute线程之间的数据通信——管道。
使用go可以创建一个轻量级的goroute线程,线程之间如何通信,共享数据呢?答案是:使用管道来进行通信。
管道需要定义并创建后,才能使用.
举例:
定义一个管道:
var my_pipe chan int
//my_pipe为管道名,chan为管道关键字表示定义的是一个管道,int表示管道内存储的数据类型
创建一个管道:
my_pipe = make(chan int,10)
//make关键字表示开辟一个内存空间,第一个参数表示创建一个管道,10表示管道能存储的数据类型个数,如果超出则阻塞
或者定义和创建合并写:
my_pipe := make(chan int,10)
管道示例:
func main() {
go pi_pie()
}
func pi_pie() {
pipe := make(chan int, 10) //make关键字创建一个管道(关键字chan),管道内装int类型的数据,并且管道大小能装10个数字,超过则阻塞
pipe <- 10 //向管道内放入数据
pipe <- 9
pipe <- 9
pipe <- 7
pipe <- 6
var p1