当前位置: 首页 > 面试题库 >

在go中输入不可知的渠道

丁和歌
2023-03-14
问题内容

我仍然有点儿纠结于golang中的接口。是否可以通过单个“通用”通道发送多种不同类型的数据?

这是一个非常简单的示例:http :
//play.golang.org/p/7p2Bd6b0QT。


问题答案:

是的,有可能。例如,在您的代码中,您可以使用:

greet: make(chan pet)

然后,您将能够无缝发送任何实现的内容type pet interface

如果您想发送 完全 通用的内容,可以使用a chan interface{},然后reflect在收到内容时使用它来查找内容。

愚蠢的-可能不是惯用的-例如:

ch := make(chan interface{})

go func() {
    select {
    case p := <-ch:
        fmt.Printf("Received a %q", reflect.TypeOf(p).Name())
    }
}() 
ch <- "this is it"

正如BurntSushi5指出的那样,类型开关更好:

p := <-ch
switch p := p.(type) {
case string:
    fmt.Printf("Got a string %q", p)
default:
    fmt.Printf("Type of p is %T. Value %v", p, p)
}


 类似资料:
  • 通知渠道用于配置接收云联壹云消息通知的途径。 通知渠道用于配置接收 云联壹云 消息通知的途径,目前支持邮件、短信、钉钉、飞书、企业微信等渠道。 用户接收 云联壹云 消息的流程如下: 在通知渠道中配置邮件、短信、钉钉、飞书、企业微信等通知渠道。 在接收人管理中新建接收人,并为用户启用邮件、短信、钉钉、飞书、企业微信等通知渠道。 云联壹云 平台中的消息通知,如告警消息,当选择接收人接收告警消息后,将会

  • 问题内容: 在简要回顾了Go语言规范,有效的Go和Go内存模型之后,我仍然不清楚Go通道是如何工作的。 它们是什么样的结构?它们的行为有点像线程安全队列/数组。 它们的实现取决于体系结构吗? 问题答案: 通道的源文件位于/src/pkg/runtime/chan.go中(从您的源代码根目录开始)。 是通道的中央数据结构,带有发送和接收链接列表(持有指向其goroutine和data元素的指针)和一

  • 接入渠道 访客可以通过微信公众号、Web、手机App渠道接入,和机器人对话。 Web APP 微信公众号 微信小程序 企业微信 微博 Open API

  • 问题内容: 我正在阅读Caleb Doxsey的Go书,我对http://www.golang-book.com/4有两个疑问 我想知道为什么在第二个Scanf之后程序没有停止并等待用户输入?以及如何测试用户是否输入了整数和/或没有留空? 问题答案: 这是发行5391::拒绝在Windows上线的末端。 作为一种解决方法,要检查输入是否有效,请编写, 和 解决方法是格式字符串中的换行符。 包 功能

  • 问题内容: 如果您的XML输入未使用UTF-8编码,则xml包的功能似乎需要一个。 你在哪里找到这样的东西? 问题答案: 更新了2015年及以后的答案:

  • 问题内容: 有没有一种方法可以在Java中创建数组,而无需先定义或要求其长度? 再次,用户输入一些数字作为参数,然后程序创建了一个包含这么多参数的数组。 问题答案: 有没有一种方法可以在Java中创建数组,而无需先定义或要求其长度?再次,用户输入一些数字作为参数,然后程序创建了一个包含这么多参数的数组。 目前尚不清楚您所处的状态。如果您知道执行时的数组长度而不是编译时的数组长度,那就可以了: 您可