校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 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類型的操作的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 夏津县| 乐业县| 金乡县| 繁昌县| 闻喜县| 聂拉木县| 孝昌县| 潞城市| 合江县| 新巴尔虎左旗| 贞丰县| 陆良县| 昂仁县| 恭城| 中宁县| 张家港市| 汕尾市| 蕲春县| 仙居县| 满洲里市| 社会| 昌邑市| 道孚县| 遵化市| 宜兰市| 昌都县| 丁青县| 含山县| 绍兴市| 丘北县| 许昌市| 通州区| 香港 | 西昌市| 威信县| 普兰店市| 陆川县| 万源市| 大安市| 依兰县| 北海市|