Go學習筆記 第4章 函式

2021-10-25 14:39:14 字數 3068 閱讀 2451

使用關鍵字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語言內部高效建立的,也就是說,有一些特定語法可以生成它們。不可變性 代表其在建立後不能就地改變。數字 字串 元祖具有不可變性 列表和字典不是這樣的。序列 是乙個包含其他物件的有序集合,其中包括 字串 列...