亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語(yǔ)言單向通道的實(shí)現(xiàn)

 更新時(shí)間:2023年04月04日 11:04:54   作者:C語(yǔ)言中文網(wǎng)  
本文主要介紹了Go語(yǔ)言單向通道的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Go語(yǔ)言的類型系統(tǒng)提供了單方向的 channel 類型,顧名思義,單向 channel 就是只能用于寫入或者只能用于讀取數(shù)據(jù)。當(dāng)然 channel 本身必然是同時(shí)支持讀寫的,否則根本沒(méi)法用。

假如一個(gè) channel 真的只能讀取數(shù)據(jù),那么它肯定只會(huì)是空的,因?yàn)槟銢](méi)機(jī)會(huì)往里面寫數(shù)據(jù)。同理,如果一個(gè) channel 只允許寫入數(shù)據(jù),即使寫進(jìn)去了,也沒(méi)有絲毫意義,因?yàn)闆](méi)有辦法讀取到里面的數(shù)據(jù)。所謂的單向 channel 概念,其實(shí)只是對(duì) channel 的一種使用限制。

單向通道的聲明格式

我們?cè)趯⒁粋€(gè) channel 變量傳遞到一個(gè)函數(shù)時(shí),可以通過(guò)將其指定為單向 channel 變量,從而限制該函數(shù)中可以對(duì)此 channel 的操作,比如只能往這個(gè) channel 中寫入數(shù)據(jù),或者只能從這個(gè) channel 讀取數(shù)據(jù)。

單向 channel 變量的聲明非常簡(jiǎn)單,只能寫入數(shù)據(jù)的通道類型為chan<-,只能讀取數(shù)據(jù)的通道類型為<-chan,格式如下:

var 通道實(shí)例 chan<- 元素類型    // 只能寫入數(shù)據(jù)的通道
var 通道實(shí)例 <-chan 元素類型    // 只能讀取數(shù)據(jù)的通道

  • 元素類型:通道包含的元素類型。
  • 通道實(shí)例:聲明的通道變量。

單向通道的使用例子

示例代碼如下:

ch := make(chan int)
// 聲明一個(gè)只能寫入數(shù)據(jù)的通道類型, 并賦值為ch
var chSendOnly chan<- int = ch
//聲明一個(gè)只能讀取數(shù)據(jù)的通道類型, 并賦值為ch
var chRecvOnly <-chan int = ch

上面的例子中,chSendOnly 只能寫入數(shù)據(jù),如果嘗試讀取數(shù)據(jù),將會(huì)出現(xiàn)如下報(bào)錯(cuò):

invalid operation: <-chSendOnly (receive from send-only type chan<- int)

同理,chRecvOnly 也是不能寫入數(shù)據(jù)的。

當(dāng)然,使用 make 創(chuàng)建通道時(shí),也可以創(chuàng)建一個(gè)只寫入或只讀取的通道:

ch := make(<-chan int)
var chReadOnly <-chan int = ch
<-chReadOnly

上面代碼編譯正常,運(yùn)行也是正確的。但是,一個(gè)不能寫入數(shù)據(jù)只能讀取的通道是毫無(wú)意義的。

 time包中的單向通道

time 包中的計(jì)時(shí)器會(huì)返回一個(gè) timer 實(shí)例,代碼如下:

timer := time.NewTimer(time.Second)

timer的Timer類型定義如下:

type Timer struct {
    C <-chan Time
    r runtimeTimer
}

第 2 行中 C 通道的類型就是一種只能讀取的單向通道。如果此處不進(jìn)行通道方向約束,一旦外部向通道寫入數(shù)據(jù),將會(huì)造成其他使用到計(jì)時(shí)器的地方邏輯產(chǎn)生混亂。

因此,單向通道有利于代碼接口的嚴(yán)謹(jǐn)性。

關(guān)閉 channel

關(guān)閉 channel 非常簡(jiǎn)單,直接使用Go語(yǔ)言內(nèi)置的 close() 函數(shù)即可:

close(ch)

在介紹了如何關(guān)閉 channel 之后,我們就多了一個(gè)問(wèn)題:如何判斷一個(gè) channel 是否已經(jīng)被關(guān)閉?我們可以在讀取的時(shí)候使用多重返回值的方式:

x, ok := <-ch

這個(gè)用法與 map 中的按鍵獲取 value 的過(guò)程比較類似,只需要看第二個(gè) bool 返回值即可,如果返回值是 false 則表示 ch 已經(jīng)被關(guān)閉。

到此這篇關(guān)于Go語(yǔ)言單向通道的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Go語(yǔ)言單向通道內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • gorm FirstOrCreate和受影響的行數(shù)實(shí)例

    gorm FirstOrCreate和受影響的行數(shù)實(shí)例

    這篇文章主要介紹了gorm FirstOrCreate和受影響的行數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 詳解Go語(yǔ)言變量作用域

    詳解Go語(yǔ)言變量作用域

    這篇文章主要介紹了Go 語(yǔ)言變量作用域的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用go語(yǔ)言,感興趣的朋友可以了解下
    2021-03-03
  • 淺談Go語(yǔ)言多態(tài)的實(shí)現(xiàn)與interface使用

    淺談Go語(yǔ)言多態(tài)的實(shí)現(xiàn)與interface使用

    如果大家系統(tǒng)的學(xué)過(guò)C++、Java等語(yǔ)言以及面向?qū)ο蟮脑?,相信?yīng)該對(duì)多態(tài)不會(huì)陌生。多態(tài)是面向?qū)ο蠓懂牣?dāng)中經(jīng)常使用并且非常好用的一個(gè)功能,它主要是用在強(qiáng)類型語(yǔ)言當(dāng)中,像是Python這樣的弱類型語(yǔ)言,變量的類型可以隨意變化,也沒(méi)有任何限制,其實(shí)區(qū)別不是很大
    2021-06-06
  • 深入了解Golang的map增量擴(kuò)容

    深入了解Golang的map增量擴(kuò)容

    這篇文章主要介紹了深入了解Golang的map增量擴(kuò)容,擴(kuò)容的主要目的是為了縮短map容器的響應(yīng)時(shí)間。增量擴(kuò)容的本質(zhì)其實(shí)就是將總的擴(kuò)容時(shí)間分?jǐn)偟搅嗣恳淮蝖ash操作上,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-06-06
  • Go語(yǔ)言自定義包構(gòu)建自己的編程工具庫(kù)

    Go語(yǔ)言自定義包構(gòu)建自己的編程工具庫(kù)

    Go 語(yǔ)言的強(qiáng)大不僅體現(xiàn)在其內(nèi)置功能上,還在于其支持自定義包,這為開(kāi)發(fā)者提供了極大的靈活性和可擴(kuò)展性,本文將深入介紹如何創(chuàng)建、使用和管理自定義包,探索 Go 語(yǔ)言包的奧秘,打造屬于你的編程工具庫(kù)
    2023-11-11
  • 一文帶你深入理解Go語(yǔ)言中的sync.Cond

    一文帶你深入理解Go語(yǔ)言中的sync.Cond

    sync.Cond?表示的是條件變量,它是一種同步機(jī)制,用來(lái)協(xié)調(diào)多個(gè)?goroutine?之間的同步。本文將通過(guò)示例為大家介紹Go語(yǔ)言中sync.Cond的使用,需要的可以參考一下
    2023-01-01
  • go語(yǔ)言環(huán)境搭建簡(jiǎn)述

    go語(yǔ)言環(huán)境搭建簡(jiǎn)述

    本文簡(jiǎn)單記錄了下go語(yǔ)言環(huán)境的搭建流程,給小伙伴們一個(gè)參考,希望大家能夠喜歡。
    2015-01-01
  • 一文詳解Golang中的匿名變量

    一文詳解Golang中的匿名變量

    匿名變量是一種特殊類型的變量,可以簡(jiǎn)化代碼并提高可讀性,本文將為大家詳細(xì)介紹一下golang中匿名變量的定義、特性和使用方法,需要的可以參考下
    2023-09-09
  • Golang中時(shí)間格式化的實(shí)現(xiàn)詳解

    Golang中時(shí)間格式化的實(shí)現(xiàn)詳解

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中進(jìn)行時(shí)間進(jìn)行格式化的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-09-09
  • Go語(yǔ)言寫入字符串到文件的方法

    Go語(yǔ)言寫入字符串到文件的方法

    這篇文章主要介紹了Go語(yǔ)言寫入字符串到文件的方法,實(shí)例分析了Go語(yǔ)言操作字符串及文本的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02

最新評(píng)論