-
好難,感覺好難用
查看全部 -
本節(jié)要點:?如果對一個?nil channel?進行讀和寫操作會進入永久阻塞,
查看全部 -
var?numbers3?=?[5]int{1,?2,?3,?4,?5} var?slice1?=?numbers3[1:4]
請注意第二條賦值語句中在“=”右邊那個部分。切片表達式一般由字符串、數(shù)組或切片的值以及由方括號包裹且由英文冒號“:”分隔的兩個正整數(shù)組成。這兩個正整數(shù)分別表示元素下界索引和元素上界索引。
在本例中,切片表達式
numbers3[1:4]
的求值結果為[]int{2, 3, 4}
??梢?,切片表達式的求值結果相當于以元素下界索引和元素上界索引作為依據(jù)從被操作對象上“切下”而形成的新值。注意,被“切下”的部分不包含元素上界索引指向的元素。查看全部 -
原生支持并發(fā)編程
查看全部 -
errors.New
是一個很常用的函數(shù)。查看全部 -
請注意,如果一條
select
語句中不存在default case
, 并且在被執(zhí)行時其中的所有case
都不滿足執(zhí)行條件,那么它的執(zhí)行將會被阻塞!當前流程的進行也會因此而停滯。直到其中一個case
滿足了執(zhí)行條件,執(zhí)行才會繼續(xù)。我們一直在說case
執(zhí)行條件的滿足與否取決于其操作的通道在當時的狀態(tài)。這里特別強調(diào)一點,即:未被初始化的通道會使操作它的case
永遠滿足不了執(zhí)行條件。對于針對它的發(fā)送操作和接收操作來說都是如此。查看全部 -
只能用于通道
查看全部 -
?? 另外,還有一點需要大家注意,我們在基底類型的值上仍然可以調(diào)用它的指針方法。例如,若我們有一個
Person
類型的變量bp
,則調(diào)用表達式bp.Grow()
是合法的。這是因為,如果Go語言發(fā)現(xiàn)我們調(diào)用的Grow
方法是bp
的指針方法,那么它會把該調(diào)用表達式視為(&bp).Grow()
。實際上,這時的bp.Grow()
是(&bp).Grow()
的速記法。查看全部 -
只要我們把
Grow
變回指針方法就可以解決這個問題。原因是,這時的person
代表的是p
的值的指針的副本。指針的副本仍會指向p
的值。另外,之所以選擇表達式person.Age
成立,是因為如果Go語言發(fā)現(xiàn)person
是指針并且指向的那個值有Age
字段,那么就會把該表達式視為(*person).Age
。其實,這時的person.Age
正是(*person).Age
的速記法。查看全部 -
的指針方法
查看全部 -
是典型的無侵入式的接口實現(xiàn)方法。
查看全部 -
- 當
*
出現(xiàn)在一個類型之前(如*Person
和*[3]string
)時被視為一個符號- 類似C語言
查看全部 -
//鍵入的數(shù)>通道長度,timeout
//直接輸出通道,不接收;為地址
//cc := <- ch3 接收的值大于有的數(shù),timeout
查看全部 -
slice(1:3)
前面的下標從0開始后面的下標從1開始
查看全部 -
go命令教程:https://github.com/hyper-carrot/go_command_tutorial
查看全部
舉報