To the people who down voted this question - it does have a legitimate answer, which is reflection (see below).
I want to create a generic function where I can pass any channel to it and it will tell me how much of its capacity is filled. I'm finding it annoying that I have to cast the channel to "chan interface{}".
My question is, for the function foo
below, I can pass a string to it and that's fine. Go accepts that as an interface{}. Why does it not behave the same for channels? Can I create a function which accepts a generic chan interface{}
?
func testFoo() {
str := "anything"
foo(str) //This is fine.
aChan := make(chan string, 10)
//This line doesn't compile. Can I avoid casting to chan interface{}?
CheckChanLen(aChan)
}
func foo(obj interface{}) {}
func CheckChanLen(aChan chan interface{}) {
chanCap := cap(aChan)
chanLen := len(aChan)
fmt.Printf("len:%d cap:%d", chanLen, chanCap)
}