极客大学Go 进阶训练营
\/ itspcool 交流学习
Go语言是google推出的一个静态编译型语言,目标是取代C、C++、Java作为系统开发的语言。开发者很多都是来自贝尔实验室的大神。Go语言包含了很多非常酷的语言特性,值得尝试。
目前Google、盛大、金山、百度等公司已经开始使用Go语言开发系统模块了。本文重点介绍下Go语言区别于一般语言的特性。其他语言,比如内置数据结构,内存管理,闭包,反射等共有的特性就不说了,Go语言全部都有。
绝大多数的云原生项目都是用 Go 语言编写的,比如 Docker、etcd、Istio、Kubernetes、Prometheus;
Go 将会成为云计算时代的基础设施编程语言,比如区块链明星项目 Hyperledger、Newsql 明星项目 TiDB 都是基于 Go 的;
Go 已经成为下一个企业级编程语言,包括字节跳动、滴滴、腾讯、阿里巴巴在内的很多公司都已经在大规模使用 Go。
语言级别的原生并发机制:goroutine
C/C++、java C#等语言都有并发的库,一般都是对操作系统的线程或进程库做封装,使用很不方便。
比如Pthread线程。
Go语言内建了并发机制,使用非常简单。Go语言会自己调度goroutine。goroutine的实现也很高效,可以同时开启几十万个goroutine,而且goroutine之间互相切换成本很低。
func abc(s sting){
time.Sleep(1);
fmt.Println(s);
}
//普通的串行调用
abc(“hello”)
//Go语言并行调用
go abc(“hello”)
Go语言还提供了远程RPC调用,执行go func() 时甚至可以是分布式调用的。
语言级别的管道通信机制:channel
大部分语言都是用共享内存方式进行通信,而Go语言完全使用消息传递来进行通信,安全高效无锁。
channel可以干各种事情,用来做消息传递,管道,缓冲区,mutex等等,还可以配合使用select语法。
ch := make(chan int, 1000)
go func(){
time.Sleep(1e9)
ch <- 999 //写入数据
}
num = <- ch //读数据
chan还可以当成参数传递。Go语言还提供了netchan,可以跨越网络实现消息传递。
语言级别的延迟执行特性:defer
比如连接MysqL,调用完成后,需要关闭连接一般语言要很小心地考虑加在什么地方。如何处理好异常,比如Java中复杂的final语法。Go语言可以非常轻松的实现,只需要在开始的时候加defer,具体什么时间调用,Go语言会帮你处理。
db.Connect(host, port, db)
defer db.Close()
…//读取数据库
4、语言级别的多返回值特性
C/C++、Java、PHP之类语言想要return多个值,需要很复杂的处理。Go语言很简单,语言天然支持。
ret1, ret2 = func1()
func func1()(ret1 int, ret2 int){
ret1 := 1
ret2 := 2
return ret1, ret2
}
7、Go语言可以跟C语言无缝结合
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。