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

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

WBOY
發布: 2024-05-03 10:12:02
原創
525 人瀏覽過

是的,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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板