首頁  >  文章  >  後端開發  >  golang匿名函式及閉包原理解析

golang匿名函式及閉包原理解析

WBOY
WBOY原創
2024-05-03 10:12:02485瀏覽

是的,Go 中的匿名函數可用於快速定義一次性函數或立即執行函數,而閉包則用於將局部變數封鎖在匿名函數中,即使後者返回也能存取這些變數。

golang匿名函式及閉包原理解析

Go 中的匿名函數和閉包理解

#匿名函數是在不定義函數名稱的情況下直接定義的函數。它們通常用於定義一次性函數,或需要立即執行的函數。 語法:

func() {
  // 函数体
}

閉包是一種將局部變數「封鎖」在匿名函數中,即使在匿名函數返回後也能存取局部變數的技術。這可以透過將匿名函數作為其他函數或方法的返回值來實現。 語法:

func makeCounter() func() int {
    count := 0
    return func() int {
        count++
        return count
    }
}

實戰案例:產生隨機數字

以下程式碼使用匿名函數和閉包產生一個產生隨機數的函數:

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    // 创建一个匿名函数,生成一个随机数
    randomFunc := func() int {
        rand.Seed(time.Now().UnixNano())
        return rand.Intn(100)
    }

    // 将匿名函数包装在一个闭包中,封锁随机数生成器
    getRand := func(r func() int) func() int {
        return func() int {
            return r()
        }
    }(randomFunc)

    // 生成 10 个随机数并打印
    for i := 0; i < 10; i++ {
        fmt.Println(getRand())
    }
}

輸出:

32
78
15
64
12
99
17
42
5
37

以上是golang匿名函式及閉包原理解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn