iT邦幫忙

0

Java 工程師學 Golang - func

  • 分享至 

  • xImage
  •  

func()可回傳多個回傳值,如果不接回傳值,可以用_

func main() {

    arr := [15]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}

    for _, a := range arr {

        _, s := fizzBuzz(a)    // fizzBuzz有2個回傳值,可以用_ 不接回傳值
        fmt.Printf("%v, %v\n", a, s)
    }

}

func fizzBuzz(n int) (int, string) {
    if n%3 == 0 && n%5 == 0 {
        return n, "FizzBuzz"
    }

    if n%3 == 0 {
        return n, "Fizz"
    }

    if n%5 == 0 {
        return n, "Buzz"
    }

    return n, ""

}

Naked return

  • 可以宣告回傳值的變數名稱,return 後面就不用寫變數了
func greeting() (name string, age int) { // 也可以宣告回傳值的變數名稱
    name = "John"
    ade = 12

    return name, age  // 常見寫法
    return            // naked return,不用再寫要回傳什麼
}

func()可以接受多個同型別的變數,Go會在背後轉成slice

func main() {
    nums(99, 100)
    nums(1)
}

func nums (i ...int) { // 參數數量不固定的寫法,Go會把他轉成slice []int
    fmt.Println(i)
}

anonymous function 匿名函式,func沒有名字,適合用在函式中,封裝小段的程式碼

func main() {

// anonymous function 匿名函式,func沒有名字,適合用在函式中,封裝小段的程式碼
    sqr := func(num int) { 
        return num * num
    }

    fmt.Printf("result:" , sqr(3))	

}

defer

  • 被加defer的func()會延後執行
  • 很多個defer的話,先進後出FILO,先defer的最後執行
  • defer 的函式,會取得變數在傳遞當下的值
func main() {
    name := "John"
    age := 15
    defer personAge(name, age)

    age *= 2
    personAge(name, age)

    //output:
    // John is 30 years old.
    // John is 15 years old.

}

func personAge(name string, age int) {
    fmt.Printf("%s is %d years old.", name, age)
}

Reference

https://www.tenlong.com.tw/products/9789863126706?list_name=c-go


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言