我想通過通道組織兩個功能之間的通信。被叫方只能將數據發送到頻道,而主叫方將在select
中等待。我想在被調用者簽名中顯示這個限制。我想要的另一件事是使用通道的類型別名。例如,我不想讓chan string
與MsgChan
一起定義爲type MsgChan chan string
。我面臨的問題 - 如果取消註釋行test1(make(Ch))
下面的代碼將無法編譯:在Go中輸入通道的別名奇怪
package main
import "fmt"
type Ch chan int
type ChIn chan<- int
func test1(in ChIn) {
fmt.Println(in)
}
func test2(in chan<- int) {
fmt.Println(in)
}
func main() {
//test1(make(Ch))
test1(make(chan int))
test2(make(Ch))
test2(make(ChIn))
}
我不明白爲什麼我不能用這樣的方法?
太棒了!該規範看起來像是我的情況!不過,我最終爲通道的val類型使用了命名類型,但不是整個通道。 –
@IvanVelichko你應該怎麼做,正如編輯答案中詳述的那樣。 – icza