91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

GO之函數操作

發布時間:2020-07-28 16:46:51 來源:網絡 閱讀:378 作者:DBAspace 欄目:編程語言

函數function

-Go函數不支持嵌套、重載、和默認參數

-支持以下特性:

-無需聲明原型、不定長度變參、多返回值、命名返回值參數、匿名函數、閉包

-定義函數使用關鍵字func,且最左括號不能另起一行

-函數也可以作為一種類型使用

#func 函數名(參數列表,可為空)(設置可返回值類型,作為可選部分){}

func A1(a int,b string)(int,string){} //定義返回的類型

func A2(a ,b,c int)(int,string){}     //定義函數值都為int類型

func A3(a int,b string)(int,string){}

##有命名返回值和不命名返回值區別:

定義多個參數:可用不定常變參

func main(){

A(1,2,3,4,5,6)

}

func A(a...int){

fmt.Println(a)

}

值類型傳遞和SLICE傳遞區別:

##函數調用:

package main
import "fmt"
func max(num1 int, num2 int) int {
    var result int
    if num1 > num2 {
        result = num1
    } else {
        result = num2
    }
    return result
}
func main() {
    var a int = 100
    var b int = 200
    var ret int
    ret = max(a, b)
    fmt.Printf("最大值是:%d\n", ret)
}

函數定義時指出,函數定義時有參數,該變量可稱為函數的形參。形參就像定義在函數體內的局部變量。 
但當調用函數,傳遞過來的變量就是函數的實參,函數可以通過兩種方式來傳遞參數:

  1. 值傳遞:指在調用函數時將實際參數復制一份傳遞到函數中,這樣在函數中如果對參數進行修改,將不會影響到實際參數。

2.   引用傳遞:是指在調用函數時將實際參數的地址傳遞到函數中,那么在函數中對參數所進行的修改,將影響到實際參數

不定參數類型:

func myfunc(args ...int){}

egg:

package main
import "fmt"
func main() {
    //var a int = 100
    //var b int = 200
    myfunc(100, 200, 300, 400, 500)
}
func myfunc(args ...int) {
    fmt.Println(args)
    for _, arg := range args {
        fmt.Println(arg)
    }
}



匿名函數:

在Go里面,函數可以像普通變量一樣被傳遞或使用,Go語言支持隨時在代碼里定義匿名函數,匿名函數由一個不帶函數名的函數聲明和函數體組成。匿名函數的優越性在于可以直接使用函數內的變量,不必申明。

func main(){

a :=func(){ //函數里沒有名字

fmt.Println("FUNC A")

}

a()

}

func A(){

fmt.Println("FUNC A")

}

閉包:閉包是由函數及其相關引用環境組合而成的實體(即:閉包=函數+引用環境)

func main(){

a :=clousre(10){ 

fmt.Println(func(1))

fmt.Println(func(2))


}

}

func clousre(x int)func(int)int{

return func(y int)int{

return x+y

}

fmt.Println("FUNC A")

}

defer:(調用:先進后出,后進先出原則)

-執行方式類似其他語言中的析構函數,在函數體執行結束后按照調用順序的相反順序逐個執行

-即使函數發生嚴重錯誤也會執行

-支持匿名函數的調用

-常用于資源清理、文件關閉、鎖解以及記錄時間等操作

-通過與匿名函數配合可在return之后修改函數計算結果

-如果函數體內某個變量作為defer時匿名函數的參數,則在定義defer時即以獲得了拷貝,否則則是引用某個變量的地址

-Go沒有異常機制,但有panic/recover模式來處理錯誤

-Panic可以在任何地方引發,但recover只有在defer調用的函數中有效

func main(){

for i :=0;i<3;i++{

defer fmt.Println(i)

}


}


func main(){

for i :=0;i<3;i++{

defer func(){

fmt.Println(i)}()

}


}


##recover案例

package main

import "fmt"

func main() {

A()

B()

C()

}

func A() {

fmt.Println("func A")

}

func B() {

defer func() {

if err := recover(); err != nil {

fmt.Println("Recover in B")

}

}()

panic("func B") //如果只有這條,執行到這就停止了

}

func C() {

fmt.Println("func C")

}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五指山市| 广河县| 宁陵县| 新乡市| 新宁县| 永定县| 白山市| 九龙城区| 玉门市| 上饶县| 广西| 滨州市| 河北省| 泸溪县| 乌兰县| 新昌县| 双流县| 凉山| 峨山| 阿尔山市| 分宜县| 都江堰市| 通河县| 丰城市| 内黄县| 宜都市| 永新县| 伊春市| 浑源县| 板桥市| 安宁市| 中江县| 乐平市| 乐东| 罗甸县| 吉首市| 灵丘县| 吴堡县| 广昌县| 彩票| 德化县|