其他分享
首页 > 其他分享> > 极客大学Go 进阶训练营

极客大学Go 进阶训练营

作者:互联网

极客大学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。

极客大学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语言无缝结合

标签:极客,进阶,goroutine,ret2,调用,func,Go,语言
来源: https://www.cnblogs.com/tomerthe/p/14453667.html