go:如何将定向通道传递给接受双向通道的函数?
Hi有一个函数接受go:如何将定向通道传递给接受双向通道的函数?,go,Go,Hi有一个函数接受chan[]byte(由于没有指定方向,我理解它是双向的)。该函数不发送或接收任何内容,只查看通道中与统计相关的元素数 我想在具有以下签名的函数中调用此函数: func foo(fooChannel chan<- []byte) func-foo(foochan重新措辞: “有没有一种方法可以将定向频道投射到无定向频道?”没有 “Go中有‘任意通道’(没有元素类型)的概念吗?”没有。Go没有泛型 您必须编写几个函数 有没有办法将fooChannel强制转换为chan[]
chan[]byte
(由于没有指定方向,我理解它是双向的)。该函数不发送或接收任何内容,只查看通道中与统计相关的元素数
我想在具有以下签名的函数中调用此函数:
func foo(fooChannel chan<- []byte)
func-foo(foochan重新措辞:
“有没有一种方法可以将定向频道投射到无定向频道?”没有
“Go中有‘任意通道’(没有元素类型)的概念吗?”没有。Go没有泛型
您必须编写几个函数
有没有办法将fooChannel强制转换为chan[]字节
不,对不起。这可能只是为了防止有人认为他们想通过接收频道发送。但是,只是一点小事情,但是……不
该函数不发送或接收任何内容,仅查看通道中的元素数量,以用于统计相关目的。[…]我仅使用len
和cap
将通道作为参数接收
如果它没有以任何类似通道的方式使用通道,您可以直接将len(ch)
和cap(ch)
作为参数传递。如果您出于任何原因不喜欢它,您可以使用包,它将允许您对支持它的任何类型(数组、通道、切片)调用len
和cap
这可能是一个良好的开端:
package main
import (
"fmt"
"reflect"
)
func stats(i interface{}) {
v := reflect.ValueOf(i)
fmt.Printf("%s size: %d/%d\n", v.Kind(), v.Len(), v.Cap())
}
func main() {
ch := make(chan int, 10)
ch <- 1
stats(ch)
}
// Output: chan size: 1/10
主程序包
进口(
“fmt”
“反映”
)
func stats(i接口{}){
v:=反射值(i)
fmt.Printf(“%s大小:%d/%d\n”,v.Kind(),v.Len(),v.Cap())
}
func main(){
ch:=制造(成交量,10)
ch,或将len(ch)和cap(ch)值传递给stats函数