使用關鍵字func
定義函式。函式有一下特點:
函式屬於第一類物件,具備相同簽名(引數以及返回值列表)的視作同一型別
func
main()
func
hello()
func
exec
(f func()
)
從閱讀和**維護的角度,使用命令型別更加方便
//定義函式型別
type formatfunc func
(string
,...
inte***ce)(
string
,error
)//如果不使用命令型別,這個引數簽名會長到沒法看
func
format
(f formatfunc, s string
, a ...
inte***ce)(
string
,error
)
建議命名規則
在避免衝突的情況下,函式命名要本著精簡短小、望文知意的原則。
go不支援預設值的可選引數,不支援命令實參。呼叫時,必須按照簽名順序傳遞指定型別和數量的實參。
在引數列表中,相鄰對的同型別引數可以合併。
func
test
(x, y int
, s string,_
bool)*
int
引數可視作函式區域性變數,因此不能再相同層次定義同名變數
func
add(x, y int
)int
形參是函式定義中的引數,實參是函式呼叫時所傳遞的和引數。形參類似函式區域性變數,實參則是函式的外部物件。可以是常量、變數、表示式或者函式等。不管是指標、引用型別,還是其他引數型別,都是值拷貝傳遞。區別無非是拷貝目標物件,還是拷貝指標。在函式呼叫前,會為形參和返回值分配記憶體空間,並將實參拷貝到形參記憶體。
變參
變參本質就是乙個切片。只能接收到乙個到多個同型別的引數,且必須放到列表的尾部。
func
main()
func
test
(s string
, a ...
int)
//執行結果
int,[1
234]
有返回值的函式,必須有明確的return終止語句。除非有panic,或者無break的死迴圈,則無須終止語句。可以使用_
忽略不想要的返回值。
可以有多個返回值,又是error模式
func
div(x, y int)(
int,
error
)return x / y ,
nil}
命名返回引數
func
paing
(sql string
, index int
)(count int
, pages int
, err error
)
命令返回引數和引數一樣,可以當做函式區域性變數使用,最後由return
隱式返回。
func
div(x, y int
)(z int
, err error)
z = x / y
return
//相當於 "return z, nil"
}
匿名函式是指沒有定義名字符號的函式。除了沒有名字,匿名函式和普通函式完全一樣。最大的區別是我們可以再函式內部定義匿名函式,形成類似巢狀的效果。
func
main()
("hello"
)}
閉包
閉包是指上下文中引用了自由變數的函式,或者說是函式和其引用的環境的組合體。
語句defer
向當前函式註冊稍後執行的函式呼叫。這些呼叫被稱作延遲呼叫,因為他們直到當前函式執行結束前才被執行。常用於資源釋放、解除鎖定以及錯誤處理等操作。
func
main()
defer f.
close()
... do something ...
}
error
官方推薦的標準做法是返回error
狀態
func
scanln
(a...
.inte***ce
)(n int
, err error
)
標註庫將error定義為介面型別,以便實心自定義錯誤型別。
type
error
inte***ce
按照慣例,error
總是最後乙個返回引數。標準庫提供了相關建立函式,可方便地建立包含簡單錯誤文字的error
物件
var errdivbyzero = errors.
new(
"division by zero"
)func
main()
println
(z)}
func
div(x, y int)(
int,
error
)return x / y ,
nil}
建議:除非是不可恢復、導致系統無法正常工作的錯誤,否則不建議使用painc
學習筆記 第4章
standard 標準模式,呼叫startactivity殘生乙個例項 singletop 檢測是否已經存在乙個例項位於activitystack的頂部,如果存在就不產生新的勢力,否則呼叫newinstance產生新的勢力 singletask 在乙個新的task中產生這個勢力,以後每次呼叫都用此例...
《C Primer Plus》第4章 學習筆記
陣列 結構和指標是c 的3中符合型別。陣列可以在乙個資料物件中儲存多個同種型別的值。通過使用索引或下標,可以訪問陣列中各個元素。結構可以將多個不同型別的值儲存在同乙個資料物件中,可以使用成員關係運算子 來訪問其中的成員。使用結構的第一步是建立結構模板,它定義結構儲存了那些成員。模板的名稱將稱為新型別...
《Python學習手冊》學習筆記 第4章
舉例4個核心資料型別 數字 字串 列表 元祖 為什麼稱作 核心 資料型別 因為它們實在python語言內部高效建立的,也就是說,有一些特定語法可以生成它們。不可變性 代表其在建立後不能就地改變。數字 字串 元祖具有不可變性 列表和字典不是這樣的。序列 是乙個包含其他物件的有序集合,其中包括 字串 列...