最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang 函數(shù)返回chan類型的操作

 更新時(shí)間:2021年04月29日 09:25:32   作者:CodeMechine  
這篇文章主要介紹了golang 函數(shù)返回chan類型的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

在閱讀kafka的golang 客戶端代碼sarama-cluster時(shí),遇到了如下一段代碼:

// 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 }

對(duì)于代碼中的<-chan *sarama.ConsumerMessage產(chǎn)生了疑問,這個(gè)是什么意思呢?

經(jīng)查閱資料,得知上面返回的是一個(gè)read-only類型的channel,即只讀的管道。

驗(yàn)證:

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)
    }
}

創(chuàng)建func A() chan C {}, 在調(diào)用A()后,返回值r為channel, 其仍可以寫入對(duì)象c,輸出結(jié)果為:

{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)
    }
}

創(chuàng)建func A() <-chan C {}, 在調(diào)用A()后,返回值r為channel, 但無法向r中寫入對(duì)象c,會(huì)報(bào)語法錯(cuò)誤,輸出結(jié)果為:

# 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數(shù)據(jù)
var ch2 <-chan int  // 聲明ch2,只用于讀int數(shù)據(jù)
ch3 := make(chan<- int, 10)  // 初始化一個(gè)只寫的channel
ch4 := make(<-chan int, 10)  // 初始化一個(gè)只讀的chaannel

補(bǔ)充:golang chan<- 和 <-chan,作為函數(shù)參數(shù)時(shí)

開始時(shí)看到這個(gè)實(shí)在沒明白怎么回事

測(cè)試了下才知道原來

<-chan int 像這樣的只能接收值

chan<- int 像這樣的只能發(fā)送值

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Go每日一庫之zap日志庫的安裝使用指南

    Go每日一庫之zap日志庫的安裝使用指南

    這篇文章主要為大家介紹了Go每日一庫之zap安裝使用示例學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Go語言中的if條件語句使用詳解

    Go語言中的if條件語句使用詳解

    這篇文章主要介紹了Go語言中的if條件語句的使用,包括if...else語句以及相關(guān)嵌套,需要的朋友可以參考下
    2015-10-10
  • go語言實(shí)現(xiàn)一個(gè)簡單的http客戶端抓取遠(yuǎn)程url的方法

    go語言實(shí)現(xiàn)一個(gè)簡單的http客戶端抓取遠(yuǎn)程url的方法

    這篇文章主要介紹了go語言實(shí)現(xiàn)一個(gè)簡單的http客戶端抓取遠(yuǎn)程url的方法,實(shí)例分析了Go語言http操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • Golang中的select語句及其應(yīng)用實(shí)例

    Golang中的select語句及其應(yīng)用實(shí)例

    本文將介紹Golang中的select語句的使用方法和作用,并通過代碼示例展示其在并發(fā)編程中的實(shí)際應(yīng)用,此外,還提供了一些與select相關(guān)的面試題,幫助讀者更好地理解和應(yīng)用select語句
    2023-12-12
  • Go語言如何使用分布式鎖解決并發(fā)問題

    Go語言如何使用分布式鎖解決并發(fā)問題

    這篇文章主要為大家詳細(xì)介紹了Go 語言生態(tài)中基于 Redis 實(shí)現(xiàn)的分布式鎖庫 redsync,并探討其使用方法和實(shí)現(xiàn)原理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • Golang錯(cuò)誤處理方式異常與error

    Golang錯(cuò)誤處理方式異常與error

    我們?cè)谑褂肎olang時(shí),不可避免會(huì)遇到異常情況的處理,與Java、Python等語言不同的是,Go中并沒有try...catch...這樣的語句塊,這個(gè)時(shí)候我們?nèi)绾尾拍芨玫奶幚懋惓D??本文來教你正確方法
    2023-01-01
  • Go?Interface接口初學(xué)者手冊(cè)

    Go?Interface接口初學(xué)者手冊(cè)

    這篇文章主要為大家介紹了Go?Interface接口的基礎(chǔ)用法實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • pytorch中的transforms.ToTensor和transforms.Normalize的實(shí)現(xiàn)

    pytorch中的transforms.ToTensor和transforms.Normalize的實(shí)現(xiàn)

    本文主要介紹了pytorch中的transforms.ToTensor和transforms.Normalize的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Go語言計(jì)算兩個(gè)經(jīng)度和緯度之間距離的方法

    Go語言計(jì)算兩個(gè)經(jīng)度和緯度之間距離的方法

    這篇文章主要介紹了Go語言計(jì)算兩個(gè)經(jīng)度和緯度之間距離的方法,涉及Go語言相關(guān)數(shù)學(xué)函數(shù)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Golang實(shí)現(xiàn)HTTP編程請(qǐng)求和響應(yīng)

    Golang實(shí)現(xiàn)HTTP編程請(qǐng)求和響應(yīng)

    本文主要介紹了Golang實(shí)現(xiàn)HTTP編程請(qǐng)求和響應(yīng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評(píng)論

绥江县| 桃园市| 龙海市| 金堂县| 江孜县| 横峰县| 靖江市| 高邑县| 滦平县| 郴州市| 肥城市| 苗栗市| 德格县| 连城县| 八宿县| 阆中市| 沭阳县| 工布江达县| 佛坪县| 泰宁县| 盘山县| 陇西县| 鄯善县| 阜新市| 紫金县| 高密市| 千阳县| 青州市| 普定县| 浦城县| 双牌县| 大竹县| 新竹县| 漯河市| 大英县| 富川| 定边县| 武川县| 德惠市| 建瓯市| 屏东县|