为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
森栏 2021-05-14 06:14:46
这行得通。var tick <-chan time.Time = time.Tick(1e8)但是,事实并非如此。var tick chan time.Time = time.Tick(1e8)为什么<-在我的类型声明中需要一个通道?我认为这<-是为了写入或读取频道。为什么会以某种类型出现?
查看完整描述

3 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

通道可以具有指示其是只读,只写还是两者兼有的类型。

用<-作为类型的一部分来指示通道方向,或者对于读/写通道省略该指示。

所以<-in<-chan time.Time是该类型的一部分,

chan   time.Time  //Would be a read/writable channel
chan<- time.Time  // Would be a write only channel
<-chan time.Time  // Would be a read only channel

time.Tick(1e8)返回一个只读通道。

此处阅读语言规范中的更多内容


查看完整回答
反对 回复 2021-05-24
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

尽管可以声明一个实际的“只读”或“仅写”通道变量,但这样做是没有用的,因为您不能对它们进行任何操作。

“只读”和“仅写”语法适用于功能参数。这种语法更像是C中的“ const”或Ada中的“ in”和“ out”。

Go频道也没有两个“终点”。UNIX管道有两个文件描述符,每个末端都有一个。通道类型的相同变量用于读取和写入。


查看完整回答
反对 回复 2021-05-24
  • 3 回答
  • 0 关注
  • 296 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信