欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

在閱讀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產(chǎn)生了疑問,這個是什么意思呢?

經(jīng)查閱資料,得知上面返回的是一個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)
    }
}

創(chuàng)建func A() chan C {}, 在調(diào)用A()后,返回值r為channel, 其仍可以寫入對象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中寫入對象c,會報語法錯誤,輸出結(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)  // 初始化一個只寫的channel
ch4 := make(<-chan int, 10)  // 初始化一個只讀的chaannel

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

開始時看到這個實在沒明白怎么回事

測試了下才知道原來

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

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

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

相關(guān)文章

最新評論