文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

golang 函数返回chan类型的操作

2024-04-02 19:55

关注

在阅读kafka的golang 客户端代码sarama-cluster时,遇到了如下一段代码:


// Messages returns the read channel for the messages that are returned by
// the broker.
//
// This channel will only return if Config.Group.Mode option is set to
// ConsumerModeMultiplex (default).
func (c *Consumer) Messages() <-chan *sarama.ConsumerMessage { return c.messages }

对于代码中的<-chan *sarama.ConsumerMessage产生了疑问,这个是什么意思呢?

经查阅资料,得知上面返回的是一个read-only类型的channel,即只读的管道。

验证:


package main
import (
    "fmt"
)
type C struct {
    Name string
}
type D struct {
    Id chan C
}
func (d *D)A() chan C {
    return d.Id
}
func main() {
    c := C{
        Name: "test",
    }
    ch := make(chan C, 10)
    ch <- c
    d := D{
        Id: ch,
    }
    r := d.A()
    r <- c
    for i:=0;i<=len(r);i++ {
        fmt.Printf("%v", <-r)
    }
}

创建func A() chan C {}, 在调用A()后,返回值r为channel, 其仍可以写入对象c,输出结果为:


{test}{test}
Process finished with exit code 0

package main
import (
    "fmt"
)
type C struct {
    Name string
}
type D struct {
    Id chan C
}
func (d *D)A() <-chan C {
    return d.Id
}
func main() {
    c := C{
        Name: "test",
    }
    ch := make(chan C, 10)
    ch <- c
    d := D{
        Id: ch,
    }
    r := d.A()
    r <- c
    for i:=0;i<=len(r);i++ {
        fmt.Printf("%v", <-r)
    }
}

创建func A() <-chan C {}, 在调用A()后,返回值r为channel, 但无法向r中写入对象c,会报语法错误,输出结果为:


# command-line-arguments
.\test2.go:29:7: invalid operation: r <- c (send to receive-only type <-chan C)
Compilation finished with exit code 2

同理, 如果返回类型为 chan<- type,则返回的是write-only类型的channel,即只能写不能读。

如何声明和初始化单向channel


var ch1 chan<- int  // 声明ch1,只用于写int数据
var ch2 <-chan int  // 声明ch2,只用于读int数据

ch3 := make(chan<- int, 10)  // 初始化一个只写的channel
ch4 := make(<-chan int, 10)  // 初始化一个只读的chaannel

补充:golang chan<- 和 <-chan,作为函数参数时

开始时看到这个实在没明白怎么回事

测试了下才知道原来

<-chan int 像这样的只能接收值

chan<- int 像这样的只能发送值

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯