一个游离于山间之上的Java爱好者 | A Java lover living in the mountains
无缓冲信道 Channel 是无法保存任何值的,该类型信道要求 发送 goroutine 和 接受 goroutine 两者同时准备好,这样才能完成发送与接受的操作。
通过上篇文章,我们知道该怎么声明信道 Channel,以及发送和读取数据。然而本文要讲的是单向Channel,可单向信道Channel到底是怎样的呢?
单向Channel
Channel 是进程内的通信方式,因此通过 channel 传递对象的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针等。如果需要跨进程通信,我们建议用分布式系统的方法来解决,比如使用 Socket 或者 HTTP 等通信协议。Go 语言对于网络方面也有非常完善的支持。
并发与并行并不相同,并发主要由切换时间片来实现“同时”运行,并行则是直接利用多核实现多线程的运行,Go程序可以设置使用核心数,以发挥多核计算机的能力。
所谓空接口就是没有方法集,以至于任何类型都可实现它,换言之,也就是空接口可以保存任意类型的值。
如果Type是具体某个类型,类型断言会检查 varl的动态类型是否等于具体类型 Type。如果检查成功,类型断言返回的结果是 varl 的动态值,其类型是 Type。 - 如果 Type 是接口类型,类型断言会检查 varl 的动态类型是否满足
Type
varl
要想实现Go中的接口,类型实现接口方法集的方法,其类型实现的方法签名必须要与接口中的方法集中方法签名一样。 类型不需要显式声明它实现了某个接口:接口被隐式地实现。多个类型可以实现同一个接口。
Go
Go中的方法是一种特殊的函数,以实现类型与函数进行绑定
Go中的结构体与c/c++语言中是差不多,然而对没有接触过c/c++语言的话,对在看到结构体这一复合类型是新鲜事物。
c/c++
复合类型
函数作为另一个函数的形参,这就是Go当中的回调函数。
在前面几篇文章,我们一直在使用Println、Printf函数,你可能没有特别注意到,就是我们可以传入任意参数。而这种可以接受任意实参的函数,函数的形参极有可能是可变参数,使用...type可声明可变参数,但必须是形参列表的最后
Println、Printf
可变参数
...type
一上来乍一看,函数变量?这究竟是什么意思呢?你函数就函数,变量便是变量,这两者搞在一块,到底是几个意思呢? 其实啊,在Go当中,函数也是一种类型,既然是类型,那就可以向其它类型一样,给变量定义类型啊!而这个类型是函数,所以函数类型
函数
函数类型
在前面几篇文章,接触到的最多的是main函数。Go 如同c/c++语言一样,对于声明函数也有属于自己的一套规则。
main
在提到关键字goto,想必很多人都心有余悸吧,毕竟goto可是编程语言界破坏代码可读性的罪魁祸首啊!以至于像c/c++或类 c 的编程语言,都将goto作为保留关键字,不建议使用,但如果你非要使用,谁人可阻止呢?
goto
相较于c/c++等的switch case,Go对switch做了很大改进,case与case之间是不需要写上break,也能跳出当前case语句,而且,switch表达式可以是任何类型的噢!
switch case
switch
case
break