Go語言基礎(chǔ)09——func函數(shù)

一、函數(shù)的基本定義

package main
import "fmt"
// 函數(shù)
// 定義一個(gè)不需要參數(shù)也沒返回值的函數(shù): sayHello
func sayHello(){
    fmt.Println("Hello jiayuan!")
}
// 定義一個(gè)接收string類型的name參數(shù)
func sayHello2(name string){
    fmt.Println("Hello", name)
}
// 定義接收多個(gè)參數(shù)的函數(shù)并且有一個(gè)返回值
func intSum(a int, b int)int{
    ret := a + b
    return ret
}

func intSum2(a int, b int)(ret int){
    ret = a + b
    return
}

// 函數(shù)接收可變參數(shù)
func intSum3(a ...int)int{
    ret := 0
    for _, v := range a {
        ret = ret + v
    }
    return ret
}

// 固定參數(shù)和可變參數(shù)同時(shí)出現(xiàn)時(shí) 可變參數(shù)放在最后
// go語言的函數(shù)中沒有固定參數(shù)
func intSum4(a int, b ...int)int{
    ret := a
    for _, v := range b {
        ret = ret + v
    }
    return ret
}
// Go語言中函數(shù)參數(shù)類型簡寫
func intSum5(a, b int)(ret int){
    ret = a + b
    return
}

// 定義具有多個(gè)返回值的函數(shù)
func calc(a, b int)(sum, sub int){
    sum = a + b
    sub = a - b
    return
}

func main(){
    //函數(shù)調(diào)用
    sayHello()
    sayHello2("jushi")
    
    fmt.Println(intSum3())
    fmt.Println(intSum3(1))
    fmt.Println(intSum3(1, 2))
    fmt.Println(intSum3(1, 2, 3))

    fmt.Println(intSum4(10))           // a = 10, b = []
    fmt.Println(intSum4(10, 20))       // a = 10, b = [20]
    fmt.Println(intSum4(10, 20, 30))   // a = 10, b = [20, 30]

    x, y := calc(100, 200)
    fmt.Println(x, y)
}

二、變量作用域

package main
import "fmt"
// 函數(shù)進(jìn)階之變量作用域
// 定義全局變量num
var num = 10

// 定義函數(shù)
func testGlobal() {
    fmt.Println("全局變量", num)
    num = 100
    // 函數(shù)中使用變量
    // 1. 先在自己函數(shù)中查找 找到了就用
    // 2. 函數(shù)中找不到變量就往外層找全局變量
    // 可以在函數(shù)中訪問全局變量
    fmt.Println("變量", num)
    //name := "jiayuan"
}

func main() {
    testGlobal()
    // 外層不能訪問到函數(shù)的內(nèi)部變量 (局部變量)
    // fmt.Println(name)
    // 變量i此時(shí)只在for循環(huán)的語句塊中生效
    for i:=0; i<5; i++{
        // fmt.Println(i)
    }
    // fmt.Println(i) // 外層訪問不到內(nèi)部for語句塊中的變量
    abc := testGlobal
    abc()
}

三、函數(shù)作為變量

package main
import "fmt"
func add(x, y int)int{
    return x + y
}
func sub(x, y int)int{
    return x - y
}
func operator(x, y int, op func(int, int)int) int {
    return op(x, y)
}
func main(){
    fmt.Println(operator(1, 2, add))
    fmt.Println(operator(3, 6, sub))
}

四、延遲執(zhí)行

package main
import "fmt"
// defer 延遲執(zhí)行
func main(){
    fmt.Println("start...")
    defer fmt.Println(1)
    defer fmt.Println(2)
    defer fmt.Println(3)
    fmt.Println("end...")
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容