mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2024-12-25 14:28:58 +00:00
parent
44923a24eb
commit
fd20d3df27
@ -10,7 +10,7 @@ Slice(切片)代表變長的序列,序列中每個元素都有相同的類
|
||||
months := [...]string{1: "January", /* ... */, 12: "December"}
|
||||
```
|
||||
|
||||
因此一月份是months[1],十二月份是months[12]。通常,數組的第一個元素從索引0開始,但是月份一般是從1開始的,因此我們聲明數組時直接第0個元素,第0個元素會被自動初始化爲空字符串。
|
||||
因此一月份是months[1],十二月份是months[12]。通常,數組的第一個元素從索引0開始,但是月份一般是從1開始的,因此我們聲明數組時直接跳過第0個元素,第0個元素會被自動初始化爲空字符串。
|
||||
|
||||
slice的切片操作s[i:j],其中0 ≤ i≤ j≤ cap(s),用於創建一個新的slice,引用s的從第i個元素開始到第j-1個元素的子序列。新的slice將隻有j-i個元素。如果i位置的索引被省略的話將使用0代替,如果j位置的索引被省略的話將使用len(s)代替。因此,months[1:13]切片操作將引用全部有效的月份,和months[1:]操作等價;months[:]切片操作則是引用整個數組。讓我們分别定義表示第二季度和北方夏天月份的slice,它們有重疊部分:
|
||||
|
||||
|
@ -8,7 +8,7 @@ ch = make(chan string, 3)
|
||||
|
||||
![](../images/ch8-02.png)
|
||||
|
||||
向緩存Channel的發送操作就是向內部緩存隊列的尾部插入原因,接收操作則是從隊列的頭部刪除元素。如果內部緩存隊列是滿的,那麽發送操作將阻塞直到因另一個goroutine執行接收操作而釋放了新的隊列空間。相反,如果channel是空的,接收操作將阻塞直到有另一個goroutine執行發送操作而向隊列插入元素。
|
||||
向緩存Channel的發送操作就是向內部緩存隊列的尾部插入元素,接收操作則是從隊列的頭部刪除元素。如果內部緩存隊列是滿的,那麽發送操作將阻塞直到因另一個goroutine執行接收操作而釋放了新的隊列空間。相反,如果channel是空的,接收操作將阻塞直到有另一個goroutine執行發送操作而向隊列插入元素。
|
||||
|
||||
我們可以在無阻塞的情況下連續向新創建的channel發送三個值:
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
ch := make(chan int) // ch has type 'chan int'
|
||||
```
|
||||
|
||||
和map類似,channel也一個對應make創建的底層數據結構的引用。當我嗎複製一個channel或用於函數參數傳遞時,我嗎隻是拷貝了一個channel引用,因此調用者何被調用者將引用同一個channel對象。和其它的引用類型一樣,channel的零值也是nil。
|
||||
和map類似,channel也一個對應make創建的底層數據結構的引用。當我們複製一個channel或用於函數參數傳遞時,我們隻是拷貝了一個channel引用,因此調用者何被調用者將引用同一個channel對象。和其它的引用類型一樣,channel的零值也是nil。
|
||||
|
||||
兩個相同類型的channel可以使用==運算符比較。如果兩個channel引用的是相通的對象,那麽比較的結果爲眞。一個channel也可以和nil進行比較。
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user