go:如何将定向通道传递给接受双向通道的函数?

go:如何将定向通道传递给接受双向通道的函数?,go,Go,Hi有一个函数接受chan[]byte(由于没有指定方向,我理解它是双向的)。该函数不发送或接收任何内容,只查看通道中与统计相关的元素数 我想在具有以下签名的函数中调用此函数: func foo(fooChannel chan<- []byte) func-foo(foochan重新措辞: “有没有一种方法可以将定向频道投射到无定向频道?”没有 “Go中有‘任意通道’(没有元素类型)的概念吗?”没有。Go没有泛型 您必须编写几个函数 有没有办法将fooChannel强制转换为chan[]

Hi有一个函数接受
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函数