首頁  >  文章  >  後端開發  >  Go 中呼叫的函數如何存取呼叫函數的參數?

Go 中呼叫的函數如何存取呼叫函數的參數?

PHPz
PHPz轉載
2024-02-09 21:15:09467瀏覽

Go 中调用的函数如何访问调用函数的参数?

Go 中呼叫的函數可以透過函數參數來取得呼叫函數的參數。在 Go 中,參數可以透過傳值或傳引用的方式傳遞給函數,函數可以透過參數來取得呼叫者傳遞的值或指標。如果參數是值類型,函數內部的操作將會在參數的拷貝上進行,不會影響到呼叫者傳遞的原始值。如果參數是指標類型,函數內部的操作將會對指標指向的原始值進行修改。透過這種方式,函數可以存取和修改呼叫函數的參數,從而實現更靈活的功能。無論是值類型還是指針類型的參數,函數都可以透過參數來取得呼叫者傳遞的值或指針,並在函數內部進行相關操作。

問題內容

請參閱參考代碼https://go.dev/play/p/yig2b6dkcoc(也貼在此):

就像這段程式碼一樣 - 參數順序沒有傳遞給 sort.slice() 函數,但它在排序包的呼叫 less() 方法中得到了很好的列印。

實作此功能的屬性是什麼?

package main

import (
    "fmt"
    "sort"
)

func main() {
    order := "abcd"
    s := "bca"
    fmt.Printf("ans: %v\n", customSortString(order, s))
}

func customSortString(order string, s string) string {
    sort.Slice([]byte(s), func(a, b int) bool {
        fmt.Printf("order: %v\n", order) // <------ How does this work? order is not passed to sort.Slice() function. 
        return s[a] < s[b]
    })
    return ""
}

解決方法

https://www.php.cn/link/58b7483ba899e0ce4d97ac5eecf6fa99

函數文字是閉包:它們可以引用周圍函數中定義的變數。然後,這些變數在周圍的函數和函數文字之間共享,並且只要可訪問,它們就會一直存在。

以上是Go 中呼叫的函數如何存取呼叫函數的參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除