目次
質問内容
解決策
ホームページ バックエンド開発 Golang ジェネリックを使用して、渡された値に特定のフィールドが含まれていることを確認する方法はありますか?

ジェネリックを使用して、渡された値に特定のフィールドが含まれていることを確認する方法はありますか?

Feb 10, 2024 pm 04:27 PM
overflow

ジェネリックを使用して、渡された値に特定のフィールドが含まれていることを確認する方法はありますか?

ジェネリックを使用して、渡された値に特定のフィールドが含まれていることを確認する方法はありますか?これは、多くの開発者がジェネリックを使用するときによく遭遇する問題です。 PHP では、型制約とインターフェイス実装を通じてこの機能を実現できます。まず、型制約を使用して、渡された値がクラスのインスタンスであることを確認できます。次に、インターフェイスを使用して特定のフィールドの仕様を定義し、渡された値にこれらのフィールドが含まれていることを確認できます。こうすることで、コード内でジェネリックスを使用し、渡された値が特定のフィールド要件を確実に満たすことができます。このようにして、ジェネリックをより効果的に活用し、コードの信頼性とセキュリティを確保できます。

質問内容

Goでid ​​intなどのフィールドを持つ値を受け取る汎用関数を定義しようとしています。いくつかの方法を試しましたが、どれもうまくいかないようです。以下は私が試した例です。

リーリー

これはプレイグラウンドのリンクです: https://gotipplay.golang.org/p/2i4rsucwagf

上記の例では、print 関数に渡される各値に、関数内でもアクセスできるプロパティ id ​​int があることを確認したいと考えています。インターフェースでメソッドを定義せずにこれを実現する方法はありますか(例: getid() int)?

解決策

インターフェイスでメソッドを定義せずにこれを実現する方法はありますか(例: getid() int)?

いいえ、インターフェースでメソッドを定義する必要があります。

go 1.18 のジェネリックスの実装は構造体型をサポートしていませんが、プリミティブ型パラメーターの提案ではサポートが示唆されています。共用体のパブリック フィールドにアクセスするには、この説明も参照してください。

それにもかかわらず、あなたの例から起こりやすい誤解を指摘する価値があると思います。近似 ~t (チルダ型) の意味は、「基になる型が t である型のセット」を意味します。 p>

今、次のように書きます:

リーリー

これは、その基になる型 が正確に struct{ id int } であることを意味します。とにかく、これにはフィールド id ​​int 他のものを持つ構造体は含まれません。例えば。 type foo struct {基になる型の id int; 名前付き文字列}struct { id int; 名前付き文字列} であり、struct{ id int } ではないため、いずれにしても制約を満たすことはできません。

現在の時間パラメーターの実装には、一部の構造タイプを指定する構文がありません。 提案インターフェース制約にフィールド用語 (および入力用語とメソッド) を追加すると、オンラインになったのを覚えています:

リーリー

これにより、チルダ ~ の意味を損なうことなく、やりたいことが実現します。ただし、これは go 1.18 には含まれません。

以上がジェネリックを使用して、渡された値に特定のフィールドが含まれていることを確認する方法はありますか?の詳細内容です。詳細については、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)

2009 年から 2025 年の誕生以来のビットコインの価格 BTC 過去の価格の最も完全な概要 2009 年から 2025 年の誕生以来のビットコインの価格 BTC 過去の価格の最も完全な概要 Jan 15, 2025 pm 08:11 PM

2009 年から 2025 年の誕生以来のビットコインの価格 BTC 過去の価格の最も完全な概要

Windows 11 の右下隅で時間がなくなった場合の対処方法_Windows 11 の右下隅で時間がなくなった場合の対処方法 Windows 11 の右下隅で時間がなくなった場合の対処方法_Windows 11 の右下隅で時間がなくなった場合の対処方法 May 06, 2024 pm 01:20 PM

Windows 11 の右下隅で時間がなくなった場合の対処方法_Windows 11 の右下隅で時間がなくなった場合の対処方法

Java 関数について質問したり議論したりできるコミュニティ フォーラムやディスカッション グループはありますか? Java 関数について質問したり議論したりできるコミュニティ フォーラムやディスカッション グループはありますか? Apr 28, 2024 pm 02:12 PM

Java 関数について質問したり議論したりできるコミュニティ フォーラムやディスカッション グループはありますか?

Pythonで他の人のコードを使用する方法 Pythonで他の人のコードを使用する方法 May 05, 2024 pm 07:54 PM

Pythonで他の人のコードを使用する方法

win11 コンピューターの時刻が常に間違っている場合はどうすればよいですか? Windows 11コンピュータで間違った時刻を調整する方法 win11 コンピューターの時刻が常に間違っている場合はどうすればよいですか? Windows 11コンピュータで間違った時刻を調整する方法 May 03, 2024 pm 09:20 PM

win11 コンピューターの時刻が常に間違っている場合はどうすればよいですか? Windows 11コンピュータで間違った時刻を調整する方法

Java関数開発における一般的な例外の種類とその修復方法 Java関数開発における一般的な例外の種類とその修復方法 May 03, 2024 pm 02:09 PM

Java関数開発における一般的な例外の種類とその修復方法

CSSでのオーバーフローとはどういう意味ですか CSSでのオーバーフローとはどういう意味ですか Apr 28, 2024 pm 03:15 PM

CSSでのオーバーフローとはどういう意味ですか

Douyin のランダムなアカウントを管理する人はいませんか?二度目の異議申し立てはできますか? Douyin のランダムなアカウントを管理する人はいませんか?二度目の異議申し立てはできますか? May 03, 2024 am 09:37 AM

Douyin のランダムなアカウントを管理する人はいませんか?二度目の異議申し立てはできますか?

See all articles