ホームページ > バックエンド開発 > Golang > Go の呼び出された関数は、呼び出し元の関数のパラメーターにどのようにアクセスしますか?

Go の呼び出された関数は、呼び出し元の関数のパラメーターにどのようにアクセスしますか?

PHPz
リリース: 2024-02-09 21:15:09
転載
514 人が閲覧しました

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

Go で呼び出される関数は、関数パラメーターを通じて呼び出し元関数のパラメーターを取得できます。 Go では、パラメータを値または参照によって関数に渡すことができ、関数はパラメータを通じて呼び出し元から渡された値またはポインタを取得できます。パラメーターが値型の場合、関数内の操作はパラメーターのコピーに対して実行され、呼び出し元によって渡された元の値には影響しません。パラメーターがポインター型の場合、関数内の操作により、ポインターが指す元の値が変更されます。このようにして、関数は呼び出し側関数のパラメーターにアクセスして変更できるため、より柔軟な機能が可能になります。値型パラメータであってもポインタ型パラメータであっても、関数は呼び出し元からパラメータを通じて渡された値またはポインタを取得し、関数内で関連する操作を実行できます。

質問内容

参考コード https://go.dev/play/p/yig2b6dkcoc (ここにも貼り付けられています) を参照してください:

このコードと同じように、引数の順序は sort.slice() 関数には渡されませんが、sort パッケージの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 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート