程序猿,一个让人又爱又恨的职业~
老王建公众号的初衷,是想要跟大家分享一些干货~ 这里的文章会由浅入深,循序渐进,且篇幅适合大家碎片化时间阅读,闲暇时候不妨看一看,顺便提高自己的编程能力也不错哦~ 每篇文章都会配一个详实的例子给大家参考!
Go语言最近大行其道,如果你有c的基础那么go语言学习过程会比较顺利,因为毕竟这门语言曾经是基于c的呢!今天老王给大家介绍go语言的几个特性:
什么是goroutine和channel?协程又是什么东西?与线程的差异性在于??
Goroutine称之为go语言的协程,可以理解为是轻量级的线程,我们都知道线程是cpu最小调用单元,多进程配合多线程可以最大程度的开发计算机多核的优势,但是在以往c代码的书写过程中,多进程多线程可谓是繁琐异常,因为涉及到操作系统的很多方面,但是在go里面协程与线程不同的是,协程的切换则是由用户控制,我们可以理解为用户端线程
Go协程实现方法十分简单:
go并行结果
这里面声明协程只需要声明一个go关键字 ,go的后面使用我们法方法,循环打印,协程的代码段放在循环里面,循环十次,也就是说我们现在起了10个协程,加上主函数main一共是11个协程,判断并行与否是通过打印结果判断的,打印结果是乱序的索引那么就说明是并行,如果是12345.。。。那就是串行。这里面可以看到goroutine是并行的,gotoutine可以理解为是一种守护线程,当然这只是相似,机理方面可能会有所不同
有了并行的操作 就要考虑数据的同步了,c里面是通过共享内存加信号量的方式进行数据同步,一堆函数,用起来比较麻烦(当然熟悉了以后就知道原来也是套路)go就简单很多了,直接用channel实现协程间通信,channel可以理解为是生产者消费者模型
下面是一个channel的例子:
第一是定义一个管道pipe,大家应该知道,go是强类型语言,所以这里声明一个管道变量pipe,需要通过有三个参数,chan表示是管道,int表示管道类型,3表示管道能存储多少个int类型(类型由前面定义)
pipe
通过len(pipe)可以查看管道的的长度
然后下面的写法
vart1 int
t1 =
等价于
t1 :=
我们来总结一下:如果想要给管道放入值:定义的管道pipe
[if !supportLineBreakNewLine]
[endif]
大家可以在自己的ide里面跑一下上面的例子~感受一下!
这一次就给大家介绍到这里,下次将为大家介绍go的其他特性……
比如包的概念以及多返回值等等,敬请期待哦!
领取专属 10元无门槛券
私享最新 技术干货