go語言筆記
標識符
一個包中的變量是以小寫字母開頭的,如果要公開一個標識符,這個標識符以大寫字母開頭,可以被直接訪問。
變量初始化
對于數(shù)值類型,零值是0;對于字符串類型,零值是空字符串;對于布爾類型,零值是false;對于指針,零值是nil;對于引用類型來說,所引用的底層數(shù)據(jù)結(jié)構(gòu)會被初始化成對應(yīng)的零值,但是被聲明為其零值的引用類型的變量,會返回nil作為其值。
defer延遲調(diào)用
關(guān)鍵字defer會安排隨后的函數(shù)調(diào)用在函數(shù)返回時菜執(zhí)行,可以保證defer聲明的函數(shù)一定會被調(diào)用,哪怕函數(shù)意外崩潰終止。使用defer可以提高代碼可讀性,減少錯誤。
可變參數(shù)
func (r *Runner) Add(tasks ...func(int)) {
r.tasks = append(r.tasks, tasks...)
}
// 調(diào)用
r := runner.New()
r.Add(createTask(), createTask(), createTask())
Select關(guān)鍵字
帶 default 分支的 select 語句可以用來嘗試向通道發(fā)送或者接收數(shù)據(jù),而不會阻塞。
// gotInterrupt verifies if the interrupt signal has been issued.
func (r *Runner) gotInterrupt() bool {
select {
// Signaled when an interrupt event is sent.
case <-r.interrupt:
// Stop receiving any further signals.
signal.Stop(r.interrupt)
return true
// Continue running as normal.
default:
return false
}
}