返回顶部
首页 > 资讯 > 后端开发 > GO >golang 函数返回chan类型的操作
  • 928
分享到

golang 函数返回chan类型的操作

2024-04-02 19:04:59 928人浏览 泡泡鱼
摘要

在阅读kafka的golang 客户端代码sarama-cluster时,遇到了如下一段代码: // Messages returns the read channel for

在阅读kafkagolang 客户端代码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 像这样的只能发送值

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

您可能感兴趣的文档:

--结束END--

本文标题: golang 函数返回chan类型的操作

本文链接: https://lsjlt.com/news/124878.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • golang 函数返回chan类型的操作
    在阅读kafka的golang 客户端代码sarama-cluster时,遇到了如下一段代码: // Messages returns the read channel for ...
    99+
    2024-04-02
  • golang函数返回值的类型转换
    函数返回值类型转换分为两种方式:type assertion 检查值与特定类型是否兼容,不兼容则报错;type conversion 不检查兼容性,直接转换。实战中,可将浮点型转换为整数...
    99+
    2024-04-23
    golang 类型转换
  • golang函数返回值的常用类型
    go 函数的常见返回值类型包括:基本类型(bool、数字、string)复合类型(数组、切片、映射、结构体)实战案例中返回布尔值表示用户是否成年其他类型(通道、生成器函数)选择返回值类型...
    99+
    2024-04-23
    golang 返回类型 字符串解析
  • golang函数可返回哪些类型?
    go语言函数可返回多种类型值,包括:基本类型(如整数、浮点数)组合类型(如数组、切片)结构体类型(自定义类型)接口类型(行为定义)错误类型(错误情况表示) Golang 函数的返回值类...
    99+
    2024-05-23
    函数类型 golang go语言
  • Golang 函数返回值的类型是什么?
    go 函数可以返回多个不同类型的值,返回值类型在函数签名中指定,并通过 return 语句返回。例如,函数可以返回一个整数和一个字符串:func getdetails() (int, s...
    99+
    2024-04-13
    类型 函数返回值 golang 代码可读性
  • golang函数返回值的类型是什么?
    go 函数可返回一个或多个类型的值,需在签名中明确指定。单返回值函数返回特定类型的单个值,而多返回值函数返回按顺序指定类型的多个值。实际应用中,如计算两个数字最大公约数 (gcd) 的函...
    99+
    2024-04-22
    返回值 golang 类型 最大公约数
  • golang函数返回值的类型与意义
    go 函数可以返回指定类型的值,包括基本类型、复合类型和引用类型。返回值的类型和意义如下:error 类型:指示操作失败。布尔值 (bool):表示成功或失败。其他类型:表示操作的结果。...
    99+
    2024-04-26
    golang 返回值类型 意义
  • Golang 函数返回值类型推导的机制
    go 语言中,函数返回值类型推导机制存在,编译器根据规则推导出返回值类型:多个返回值:每个返回值推导出实际类型。单个返回值未指定类型:推导出与实际值相同类型。无返回值:推导出 void ...
    99+
    2024-05-23
    golang 返回值类型推导
  • 确定 Golang 中函数返回的接口 {} 值的类型
    问题内容 我有一个从枚举返回值的函数。枚举定义如下: type DataType int64 const ( INT DataType = iota FLOAT ...
    99+
    2024-02-05
  • C++ 函数返回值类型的常见类型
    c++++ 函数返回类型包括:void(无返回值)、基本类型(整数、浮点数、字符和布尔值)、指针、引用、类和结构。选择时,应考虑功能、效率和接口。如计算阶乘的 factorial 函数,...
    99+
    2024-04-12
    函数 返回值 c++
  • Golang 函数返回值如何进行类型检查?
    go 语言中的函数返回值类型检查机制会在编译时执行类型检查,确保函数实际返回值类型与函数声明的返回类型匹配。类型检查规则包括:返回类型值个数相符,类型兼容性判断兼容性关系有:相同基础类型...
    99+
    2024-04-13
    golang 类型检查
  • 理解 C++ 函数返回值类型的作用域
    c++++ 函数返回值类型的作用域仅限于函数体内,用于指定函数返回的值的数据类型,有助于确保类型安全和正确使用返回的值。 理解 C++ 函数返回值类型的作用域 在 C++ 中,函数的返...
    99+
    2024-04-13
    函数 c++ 返回值 作用域
  • PHP函数的返回值类型和返回值说明
    PHP是一种类型松散的编程语言,这意味着它允许开发人员在运行时更轻松地修改变量类型。但是,在编写函数时,开发人员必须清楚函数的返回类型和返回值说明,以确保函数将返回正确的数据类型和结构。PHP函数的返回值类型在5.0版本之前,PHP函数无法...
    99+
    2023-05-18
    PHP函数 返回值类型 返回值说明
  • 返回 Golang 中的联合类型
    Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《返回 Golang 中的联合类型》带大家来了解一下##content_title##,...
    99+
    2024-04-04
  • Golang的func参数及返回值操作
    参数及返回值 参数一指定数据类型为int 参数二 (…interface{}) 可传任何多个不同类型的参数 返回值:单个返回值直接指定数据类型可以不使用 (),多个返回值需使用()。...
    99+
    2024-04-02
  • Golang 函数返回值可以强制类型转换吗?
    go 语言允许函数返回值强制类型转换,其语法格式为 value := variable.(targettype)。强制类型转换可用于将 interface{} 类型的值转换为特定类型,如...
    99+
    2024-04-13
    golang 类型转换
  • golang函数的返回值
    go 语言函数可以使用 return 语句返回多个值,通过调用函数后指定变量接收。返回值数量及类型需在函数声明中明确指定,且函数可返回任意数量的值(但不能返回空值)。 Go 语言函数的...
    99+
    2024-04-19
    返回值 golang
  • mysqli_query($conn, $sql)函数的返回值类型
    本篇文章给大家分享的是有关mysqli_query($conn, $sql)函数的返回值类型,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、...
    99+
    2024-04-02
  • C++ 函数如何返回 void 类型?
    c++++ 中 void 函数不返回任何值,它的语法为 void function_name()。常见用途包括:输入用户输入,如获取用户的年龄并打印到控制台。 C++ 中 void 函...
    99+
    2024-04-20
    c++ void
  • C++ 函数返回值类型在多态性中的作用
    多态中,函数返回值类型规定了当派生类重写基类方法时,返回的具体对象类型。派生类方法的返回值类型可以与基类相同或更具体,允许返回更派生的类型,从而提高灵活性。 C++ 函数返回值类型在多...
    99+
    2024-04-13
    多态性 函数返回值类型 c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作