ホームページ バックエンド開発 Golang Golang汎用関数アプリケーション

Golang汎用関数アプリケーション

Apr 29, 2024 pm 01:45 PM
golang 関数 ジェネリック

Go 1.18 では、汎用関数が導入され、型パラメーター化がサポートされ、コードの再利用性が強化されています。ジェネリック関数の構文は、 func 関数名 [型パラメータ] (入力パラメータ 型パラメータ) 型パラメータであり、型パラメータ化された型を入力および戻り値の型として使用できます。たとえば、Min[T 数値] (a, b T) T の場合、T は数値型である必要があり、a と b は T 型の入力パラメーターであり、小さい方の数値が返されます。ジェネリック関数によりコードの再利用性が大幅に向上し、さまざまなタイプに適した一般的なコードを作成できるようになります。

Golang汎用関数アプリケーション

Go でのジェネリクスの関数アプリケーション

Go 1.18 以降で導入されたジェネリクスにより、関数は Type パラメータ化された型を受け入れ、返すことができます。これにより、コードの再利用性と柔軟性が大幅に向上します。

構文

汎用関数の構文は次のとおりです:

func myFunc[T any](input T) T {
    // ...
}
ログイン後にコピー

その中には次のとおりです:

  • myFunc は関数名です。
  • T any は型パラメータです。カスタム タイプを含め、任意のタイプにすることができます。
  • input は、パラメータ化された型を持つ入力パラメータです。
  • T は、型パラメーター化された型の戻り値の型です。

実際的なケース

2 つの数値の最小値を計算する関数を作成するとします。ジェネリック関数を使用すると、特定の型シグネチャを持つ複数の関数を作成することなく、これら 2 つの数値を任意の数値型で表すことができます。

次の汎用関数を作成できます:

func Min[T number](a, b T) T {
    if a < b {
        return a
    }
    return b
}
ログイン後にコピー

ここで:

  • Tnumber は、型パラメータ T が数値でなければならないことを意味します。型 (たとえば、int、float64)。
  • a および b は、タイプ T の入力パラメーターです。
  • if-else ステートメントは 2 つの数値を比較し、小さい方の数値を返します。

この関数を使用して、さまざまなタイプの数値の最小値を計算できます:

var a int8 = 10
var b int16 = 20
min := Min(a, b)  // 类型推断为 int16
fmt.Println(min)  // 输出:10
ログイン後にコピー

結論

Go ジェネリックスは許可することで受け入れます。関数と戻り値の型指定により、コードの再利用性と柔軟性が大幅に向上します。ジェネリック関数を使用すると、さまざまな型で動作するジェネリック コードを作成できます。

以上がGolang汎用関数アプリケーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang データベース接続用の接続プールを構成するにはどうすればよいですか? Golang データベース接続用の接続プールを構成するにはどうすればよいですか? Jun 06, 2024 am 11:21 AM

Golang データベース接続用の接続プールを構成するにはどうすればよいですか?

Golang を使用してファイルを安全に読み書きするにはどうすればよいですか? Golang を使用してファイルを安全に読み書きするにはどうすればよいですか? Jun 06, 2024 pm 05:14 PM

Golang を使用してファイルを安全に読み書きするにはどうすればよいですか?

Golang と C++ の類似点と相違点 Golang と C++ の類似点と相違点 Jun 05, 2024 pm 06:12 PM

Golang と C++ の類似点と相違点

Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか? Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか? Jun 05, 2024 pm 06:59 PM

Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか?

Golangでリストからランダムな要素を生成するにはどうすればよいですか? Golangでリストからランダムな要素を生成するにはどうすればよいですか? Jun 05, 2024 pm 04:28 PM

Golangでリストからランダムな要素を生成するにはどうすればよいですか?

golangフレームワークの長所と短所の比較 golangフレームワークの長所と短所の比較 Jun 05, 2024 pm 09:32 PM

golangフレームワークの長所と短所の比較

Golang フレームワークでのエラー処理のベスト プラクティスは何ですか? Golang フレームワークでのエラー処理のベスト プラクティスは何ですか? Jun 05, 2024 pm 10:39 PM

Golang フレームワークでのエラー処理のベスト プラクティスは何ですか?

golang フレームワーク ドキュメントの使用手順 golang フレームワーク ドキュメントの使用手順 Jun 05, 2024 pm 06:04 PM

golang フレームワーク ドキュメントの使用手順

See all articles