Go 言語では、関数ポインタは関数のエントリ アドレスを指し、変数に格納したり、関数に渡すことができます。関数ポインターを使用すると、関数を呼び出すコードを、それを実装するコードから分離するのに役立ちます。関数の保存、関数の受け渡し、または関数の戻りに使用できます。アプリケーション シナリオの 1 つは、並べ替え可能なキーと値のペアを作成し、関数ポインターを使用してカスタム並べ替えルールを定義し、キーと値のペアを値の昇順で並べ替えることです。
Go 言語の関数ポインタ
関数ポインタは関数へのポインタです。 Go では、関数はファーストクラスの値であるため、変数に格納したり、関数に渡したり、関数から返すことができます。関数ポインターを使用する主な利点は、関数を呼び出すコードが、関数を実装するコードから分離されることです。
関数ポインタの本質
関数ポインタは本質的には関数のエントリアドレスを指すポインタです。 Go 言語では、関数ポインターのタイプは func(*args)(*result)
です。ここで、
*args
は関数パラメーターです。 type Pointer*result
は関数の値またはポインタです。戻り値の type関数ポインタの使用法
# #1.関数
func add(a, b int) int { return a + b } func main() { // 将 add 函数存储在变量 f 中 f := add // 通过 f 调用 add 函数 fmt.Println(f(1, 2)) // 输出:3 }
2を保存し、関数
func apply(f func(int) int, arg int) int { return f(arg) } func main() { // 将 add 函数传递给 apply 函数 result := apply(add, 10) fmt.Println(result) // 输出:11 }
3に渡します。 実践的なケース: 並べ替え可能なキーと値のペアを作成する関数型
次は、関数ポインターを使用して並べ替え可能なキーと値のペアを作成する Go 言語プログラムです:
func getAdder(val int) func(int) int { return func(arg int) int { return val + arg } } func main() { // 获得一个返回 10 加数的函数 add10 := getAdder(10) // 使用 add10 函数 fmt.Println(add10(20)) // 输出:30 }
type kv struct { key string val int } func (kv *kv) SortByValue() { sort.Slice(kv, func(i, j int) bool { return kv[i].val < kv[j].val }) } func main() { kvList := []*kv{ {"key1", 10}, {"key2", 5}, {"key3", 15}, } kvList.SortByValue() for _, kv := range kvList { fmt.Println(kv.key, kv.val) } }
SortByValue
関数ポインターは、kv スライス内の要素を値の昇順で並べ替えるカスタム並べ替えルールを定義します。 。
以上がgolang関数ポインタの本質と使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。