调用接受“ chan interface {}”的函数

thebiggestlebowski:

对于对此问题投反对票的人-它确实有一个合理的答案,这是反思(请参阅下文)。

我想创建一个通用函数,可以在其中传递任何通道,它将告诉我其容量已满。我不得不将频道强制转换为“ chan interface {}”,这很烦人。

我的问题是,对于foo下面的函数,我可以将字符串传递给它,这很好。Go将其视为接口{}。为什么通道的行为不一样?我可以创建一个接受泛型的函数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)
}
colm.anseo:

简短的回答:不。

chan interface{}与的类型不同interface{}

interface{}是一个包罗万象的所有类型,但是chan interface{}不是一个包罗万象的所有chan类型。

泛型会带来这种能力,但他们不是在Go语言()。


如果您需要做的只是检查信道容量/长度,则可以reflect像下面这样使用程序包:

import "reflect"

func CheckChanLen(aChan interface{}) {
        rv := reflect.ValueOf(aChan)
        if rk := rv.Kind(); rk != reflect.Chan {
                panic("expecting type: 'chan ...'  instead got: " + rk.String())
        }           

        chanCap := rv.Cap()
        chanLen := rv.Len()
        fmt.Printf("len:%d cap:%d\n", chanLen, chanCap)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

接受interface {}参数的函数如何更新通过引用调用的值?

接受函数调用后的新客户

PHP调用Javascript函数不接受参数

如何为go中接受interface {}的函数创建类型条件?

“ <-chan”和“ chan”作为函数返回类型有什么区别?

如何在函数之间传递带有chan的var

通过提供键从map [string] interface {}调用函数

调用从 Python 接受并返回 std::string 的 C++ 函数

如何调用接受表类型参数并返回表的函数?

cppyy-如何调用接受集合的C ++函数?

Python argparse不会在函数调用时接受参数

Python3-如何调用可变地接受* args的函数

调用删除函数后双链表不接受输入

winsock2 接受客户端而不调用接受函数

如何在具有chan参数接受多个类型的结构上创建func?

未类型化的函数调用可能不接受类型参数-Angular 5 http调用

测试 chan 处理函数时结果不一致

使用psycopg2调用postgres函数,该函数接受自定义类型的数组

Flask - 调用 python 函数,该函数在按钮 OnClick 事件上接受输入参数

从php循环调用javascript函数(接受参数)并处理javascript函数中的参数

接受接受特征实现的函数的函数

如何从另一个函数调用dbmap.Insert(interface {})?

Typescript泛型包装器:未类型化的函数调用可能不接受类型参数

如何设置接受函数调用者提供的参数的装饰器?

在不能接受集合的上下文中调用的集合值函数

Java反射-使用接受接口作为参数的公共构造函数调用受保护的类

前往:在一个函数中接受不同的套接字调用

结构数组:没有匹配函数可调用和接受用户输入

接受可变数量的链式调用的函数,如`add(1)(2)(3)(4)`