为什么通道类型中带有“ <-”?

这行得通。

var tick <-chan time.Time = time.Tick(1e8)

但是,事实并非如此。

var tick chan time.Time = time.Tick(1e8)

为什么<-在我的类型声明中需要一个通道?我认为这<-是为了写入或读取频道。为什么会以某种类型出现?


森栏
浏览 297回答 3
3回答

慕斯王

通道可以具有指示其是只读,只写还是两者兼有的类型。用<-作为类型的一部分来指示通道方向,或者对于读/写通道省略该指示。所以<-in<-chan time.Time是该类型的一部分,chan&nbsp;&nbsp;&nbsp;time.Time&nbsp;&nbsp;//Would&nbsp;be&nbsp;a&nbsp;read/writable&nbsp;channel chan<-&nbsp;time.Time&nbsp;&nbsp;//&nbsp;Would&nbsp;be&nbsp;a&nbsp;write&nbsp;only&nbsp;channel <-chan&nbsp;time.Time&nbsp;&nbsp;//&nbsp;Would&nbsp;be&nbsp;a&nbsp;read&nbsp;only&nbsp;channel并time.Tick(1e8)返回一个只读通道。在此处阅读语言规范中的更多内容

牛魔王的故事

尽管可以声明一个实际的“只读”或“仅写”通道变量,但这样做是没有用的,因为您不能对它们进行任何操作。“只读”和“仅写”语法适用于功能参数。这种语法更像是C中的“ const”或Ada中的“ in”和“ out”。Go频道也没有两个“终点”。UNIX管道有两个文件描述符,每个末端都有一个。通道类型的相同变量用于读取和写入。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go