目次
一般的な関数を定義します
タイプ制約を使用します
一般的なデータ構造を作成します
ホームページ バックエンド開発 Golang Golangでジェネリックを使用する方法

Golangでジェネリックを使用する方法

Sep 19, 2025 am 05:29 AM
golang ジェネリック

GOのジェネリックは、タイプセーフ、再利用可能な機能とデータ構造を有効にします。 Go 1.18で導入されたこれらは、制約を実施しながら、FUNC Max [T Camplable](A、B T)Tなどの関数を複数のタイプで動作させることにより、コードの複製を減らします。 [T CAMPALABLE]などの角括弧内のタイプパラメーターは、比較のサポートを保証する許容操作を定義します。タイプ番号インターフェイスなどのインターフェイスを使用したカスタム制約{int | float64 | float32}、[t数](a、b t)T。の追加などの特定の操作をサポートするものに制限します。型スタック[t任意の] struct {item [] t}などの汎用データ構造は、任意のタイプで動作する柔軟な容器の作成を可能にし、パフォーマンスや安全性を犠牲にすることなく再利用性を高めることができます。

Golangでジェネリックを使用する方法

GOのジェネリックを使用すると、タイプの安全性を維持しながら、さまざまなタイプで動作する関数とデータ構造を作成できます。 Go 1.18で導入されたため、ロジックが複数のタイプで同じである場合、コードの重複を減らすのに役立ちます。

一般的な関数を定義します

一般的な関数を作成するには、通常の関数パラメーターの前に四角いブラケット内でタイプパラメーターを使用します。

たとえば、2つの値の大きい値を返す単純な関数は次のとおりです。

func max [t比較可能](a、b t)t {
a> bの場合{
aを返します
}
b
}

tは型パラメーターであり、 comparableは>のような比較操作をサポートすることを保証する制約です。この関数を呼び出すと、 intfloat64 、またはstringなどのタイプを渡すことができます。

タイプ制約を使用します

制約は、タイプパラメーターがサポートする操作を定義します。比較可能任意のような組み込みの制約(任意のタイプを許可する)を使用したり、インターフェイスを使用して独自の制約を定義したりできます。

カスタム制約を備えた例:

タイプ番号インターフェイス{
int | float64 | float32
}

func sum [t number](a、b t)t {
ABを返します
}

これにより、 Tは数値タイプのみに制限され、を確認します 操作は有効です。

一般的なデータ構造を作成します

コンテナなどの一般的なタイプを定義することもできます。

stack [t any] struct {を入力{
アイテム[] t
}

func(s *stack [t])push(item t){
s.items = append(s.items、item)
}

func(s *stack [t])pop()(t、bool){
Len(S.Items)== 0の場合{
var zero t
ゼロを返す、false
}
項目:= s.items [len(s.items)-1]
s.items = s.items [:len(s.items)-1]
リターンアイテム、true
}

このスタック[t]はスタック[int]stack [string]など、あらゆるタイプで動作します。

ジェネリックを使用すると、パフォーマンスを犠牲にすることなく、GOコードがより再利用可能で安全になります。制約を明確に保ち、​​読みやすさを維持するために複雑さを制限するだけです。

基本的に、必要に応じてタイプパラメーターを追加し、それらのタイプがサポートすべき内容を指定します。

以上がGolangでジェネリックを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

ホットトピック

Golangで使用される空のstruct struct {}は何ですか Golangで使用される空のstruct struct {}は何ですか Sep 18, 2025 am 05:47 AM

struct {}はgoのフィールドレス構造であり、ゼロバイトを占有し、データが不要なシナリオでよく使用されます。 Goroutine同期など、チャネル内の信号として使用されます。 2。効率的なメモリの重要な存在チェックを実現するために、値の種類のコレクションとして使用されます。 3.依存関係の注入または組織機能に適した定義可能なステートレスメソッドレシーバー。このタイプは、制御フローと明確な意図を表現するために広く使用されています。

Golangでファイルをどのように読み取り、書き込みますか? Golangでファイルをどのように読み取り、書き込みますか? Sep 21, 2025 am 01:59 AM

Goprovidessimpleandefficientfilehandlingusingtheosandbufiopackages.Toreadasmallfileentirely,useos.ReadFile,whichloadsthecontentintomemorysafelyandautomaticallymanagesfileoperations.Forlargefilesorincrementalprocessing,bufio.Scannerallowsline-by-liner

Golang Webサーバーのコンテキストのミドルウェアは何ですか? Golang Webサーバーのコンテキストのミドルウェアは何ですか? Sep 16, 2025 am 02:16 AM

ミドルウェアワーシングウェブシュアレーバーは、interceptttprequestSeyreatheyreachtheTheTheHandlerを使用して、カットカッティングの機能性を有効にします

Golangアプリケーションの優雅なシャットダウンをどのように処理しますか? Golangアプリケーションの優雅なシャットダウンをどのように処理しますか? Sep 21, 2025 am 02:30 AM

GracefulshutdownsingoApplicationSaresentialForreliability、retureved vedeved bytevedeved byteved interceptingsignalsigintandsig themusinging theos/signalpackagetoinitiateShutdownprocedures、その後、spapppppstpstp.server’sshutdodd()方法

CGOとは何ですか、そしてGolangでいつ使用するか CGOとは何ですか、そしてGolangでいつ使用するか Sep 21, 2025 am 02:55 AM

cgoenablesgotocallcode、clibraries likeopenssl、accesstolow-levelsystemapis、およびperformanceptimizationを使用することを可能にします

GolangのJSONのカスタムマーシャラー/マーシャラーを作成する方法 GolangのJSONのカスタムマーシャラー/マーシャラーを作成する方法 Sep 19, 2025 am 12:01 AM

MarshaljsonとMarshaljsonのカスタマイズ可能なGO構造のJSONシリアル化と脱滑りを実装します。 2。フィールド形式の変換など、Marshaljsonを介して出力構造を制御します。 3.カスタム日付など、Unmarshaljsonを介した特別なフォーマットデータの解析。 4.再帰的な呼び出しによって引き起こされる無限ループを避けるために注意し、タイプエイリアスを使用してカスタムメソッドをバイパスします。

Golangのフラグパッケージの使用方法 Golangのフラグパッケージの使用方法 Sep 18, 2025 am 05:23 AM

flagpackageingoparsessoscommand-linearguments bydefiningflagslikestring、int、orb​​oolusingflag.stringvar、flag.intvarなど、suchasflag.stringvar(&host "、" host "、" localhost "、" serverAddress ");

javaでワイルドカード(?tを拡張)でジェネリックを使用する方法は? javaでワイルドカード(?tを拡張)でジェネリックを使用する方法は? Sep 20, 2025 am 02:47 AM

?extendstは、ジェネリックで読み取り専用操作を実装するために使用される「不明なtサブタイプ」を意味します。これは、データが読み取られているが書かれていないシナリオに適したTまたはそのサブクラスを受け入れることができます。

See all articles