Ich möchte die Kommunikation zwischen zwei Funktionen über Kanäle organisieren. Der Angerufene kann nur Daten an den Kanal senden, während der Anrufer im select
darauf wartet. Und ich möchte diese Einschränkung in der callee Signatur zeigen. Eine andere Sache, die ich will, arbeitet mit Typ-Aliasen für Kanäle. Zum Beispiel, anstatt chan string
zu haben, möchte ich mit MsgChan
definiert als type MsgChan chan string
arbeiten. Und ich mit dem Problem konfrontiert - der folgende Code wird nicht kompiliert, wenn uncomment Linie test1(make(Ch))
:Typ Alias für Kanal in Go funktioniert seltsam
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))
}
Ich verstehe nicht, warum ich nicht ein solcher Ansatz nicht verwenden kann?
Großartig! Die Spezifikation sieht so aus, als wäre es genau mein Fall! Ich habe jedoch benannte Typen für den Val-Typ des Kanals verwendet, aber nicht den gesamten Kanal. –
@IvanVelichko Genau was Sie tun sollten, wie in der bearbeiteten Antwort beschrieben. – icza