主页 > 知识库 > golang 函数返回chan类型的操作

golang 函数返回chan类型的操作

热门标签:电话机器人软件免费 外呼系统用什么卡 涿州代理外呼系统 外呼系统显本地手机号 评价高的400电话办理 阿克苏地图标注 excel地图标注分布数据 百度地图标注后传给手机 寿光微信地图标注

在阅读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 像这样的只能发送值

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

您可能感兴趣的文章:
  • Golang 空map和未初始化map的注意事项说明
  • Golang 如何判断数组某个元素是否存在 (isset)
  • Go语言的Channel遍历方法详解
  • Golang 拷贝Array或Slice的操作
  • 基于Go Int转string几种方式性能测试
  • Go语言中break label与goto label的区别
  • Go 实现英尺和米的简单单位换算方式

标签:重庆 钦州 吐鲁番 梅河口 鸡西 汕头 兰州 铜川

巨人网络通讯声明:本文标题《golang 函数返回chan类型的操作》,本文关键词  golang,函数,返回,chan,类型,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《golang 函数返回chan类型的操作》相关的同类信息!
  • 本页收集关于golang 函数返回chan类型的操作的相关信息资讯供网民参考!
  • 推荐文章