我知道单向channel是怕渠道滥用, 只能读的渠道出现写的情况, 但是具体的用法呢
比如time包里面的Timer
屏幕快照 2019-09-12 下午3.50.04
这边将C 已经定义为了, 只出的类型, 那么是怎么赋值的呢, 找了下貌似没找到
我知道单向channel是怕渠道滥用, 只能读的渠道出现写的情况, 但是具体的用法呢
比如time包里面的Timer
屏幕快照 2019-09-12 下午3.50.04
这边将C 已经定义为了, 只出的类型, 那么是怎么赋值的呢, 找了下貌似没找到
给你看看官方怎么赋值的:
func NewTicker(d Duration) *Ticker {
if d <= 0 {
panic(errors.New("non-positive interval for NewTicker"))
}
// Give the channel a 1-element time buffer.
// If the client falls behind while reading, we drop ticks
// on the floor until the client catches up.
c := make(chan Time, 1)
t := &Ticker{
C: c,
r: runtimeTimer{
when: when(d),
period: int64(d),
f: sendTime,
arg: c,
},
}
startTimer(&t.r)
return t
}
官方对 Channel 类型的解释 里面讲到了 只读/只写 通道,不过没有介绍具体的应用场景。不过从特性来看,如果把一个变量定义为只读的channel,那么在这个函数里面只能读这个变量,如果尝试写这个变量编译器会报错,从而可以避免编码出错。
定义时候可以定义为双向通道,函数引用的时传入单向通道,增加代码可读性
func receive(strChan <-chan string){
//...
}
这种引用通道的方式,让人一看就知道只会从strChan中取数据
2 回答2.4k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答1.2k 阅读
1 回答1.8k 阅读
总结一下:
a := make(chan int, 3)
a <- 1 // 塞了一个数据
//往渠道里塞2,3 两个数字
func test2(b chan<- int) {
}
fmt.Println(a)
得到的结果是1,2,3