使用簡單的 make 調(diào)用創(chuàng)建的通道叫做無緩沖通道,但 make 還可以接受第二個可選參數(shù),一個表示通道容量的整數(shù)。如果容量是 0,make 創(chuàng)建一個無緩沖通道。
信陽網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,信陽網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為信陽千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的信陽做網(wǎng)站的公司定做!
無緩沖通道上的發(fā)送操作將被阻塞,直到另一個 goroutine 在對應(yīng)的通道上執(zhí)行接受操作,這時值傳送完成,兩個 goroutine 都可以繼續(xù)執(zhí)行。相反,如果接受操作先執(zhí)行,接收方 goroutine 將阻塞,直到另一個 goroutine 在同一個通道上發(fā)送一個值。使用無緩沖通道進(jìn)行的通信導(dǎo)致發(fā)送和接受操作 goroutine 同步化。因此,無緩沖通道也稱為同步通道。當(dāng)一個值在無緩沖通道上傳遞時,接受值后發(fā)送方 goroutine 才能被喚醒。
緩沖通道上的發(fā)送操作在隊列的尾部插入一個元素,接收操作從隊列的頭部移除一個元素。如果通道滿了,發(fā)送操作會阻塞所在的 goroutine 直到另一個 goroutine 對它進(jìn)行接收操作來留出可用的空間。反過來,如果通道是空的,執(zhí)行接收操作的 goroutine 阻塞,直到另一個 goroutine 在通道上發(fā)送數(shù)據(jù)。
如果給一個 nil 的 channel 發(fā)送數(shù)據(jù),會造成永遠(yuǎn)阻塞。
如果從一個 nil 的 channel 中接收數(shù)據(jù),也會造成永久阻塞。 給一個已經(jīng)關(guān)閉的 channel 發(fā)送數(shù)據(jù), 會引起 panic。
從一個已經(jīng)關(guān)閉的 channel 接收數(shù)據(jù), 如果緩沖區(qū)中為空,則返回一個 零 值。
1、數(shù)組是多個 相同類型 的數(shù)據(jù)的組合,一個數(shù)組一旦聲明/定義了,其 長度是固定的,不能動態(tài)變化 。
2、var arr []int? ? 這時arr就是一個slice 切片 。
3、數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括值類型和引用類型,但是 不能混用 。
4、數(shù)組創(chuàng)建后,如果沒有賦值,有默認(rèn)值如下:
? ? 數(shù)值類型數(shù)組:????默認(rèn)值為 0
? ? 字符串?dāng)?shù)組:? ? ? ?默認(rèn)值為 ""
? ? bool數(shù)組:? ? ? ? ? ?默認(rèn)值為 false
5、使用數(shù)組的步驟:
? ? (1)聲明數(shù)組并開辟空間
? ? (3)給數(shù)組各個元素賦值
? ? (3)使用數(shù)組
6、數(shù)組的下標(biāo)是從0開始的。
7、數(shù)組下標(biāo)必須在指定范圍內(nèi)使用,否則報panic:數(shù)組越界,比如var arr [5]int的有效下標(biāo)為0~4.
8、Go的數(shù)組屬于 值類型 ,在默認(rèn)情況下是 值傳遞 ,因此會進(jìn)行值拷貝。 數(shù)組間不會相互影響。
9、如想在其他函數(shù)中去修改原來的數(shù)組,可以使用 引用傳遞 (指針方式)。
10、長度是數(shù)組類型的一部分,在傳遞函數(shù)參數(shù)時,需要考慮數(shù)組的長度,看以下案例:
題1:編譯錯誤,因為不能把[3]int類型傳遞給[]int類型,前者是數(shù)組,后者是切片;
題2:編譯錯誤,因為不能把[3]int類型傳遞給[4]int類型;
題3:編譯正確,因為[3]int類型傳給[3]int類型合法。
舉個例子,如下
答案
解析:
defer函數(shù)在處理Panic() 和Recover()時的應(yīng)用
panic 函數(shù)是內(nèi)置的go函數(shù),它 終止 go程序的當(dāng)前流程并開始 panicking , recover 函數(shù)也是內(nèi)置的一個go函數(shù),允許你收回處理那些使用了 panic 函數(shù)的 goroutine 的控制權(quán)
來個案例