ホームページ > バックエンド開発 > Golang > golang関数ポインタの本質と使い方

golang関数ポインタの本質と使い方

王林
リリース: 2024-04-26 09:18:01
オリジナル
903 人が閲覧しました

Go 言語では、関数ポインタは関数のエントリ アドレスを指し、変数に格納したり、関数に渡すことができます。関数ポインターを使用すると、関数を呼び出すコードを、それを実装するコードから分離するのに役立ちます。関数の保存、関数の受け渡し、または関数の戻りに使用できます。アプリケーション シナリオの 1 つは、並べ替え可能なキーと値のペアを作成し、関数ポインターを使用してカスタム並べ替えルールを定義し、キーと値のペアを値の昇順で並べ替えることです。

golang関数ポインタの本質と使い方

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 サイトの他の関連記事を参照してください。

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