any を使用して共通インターフェイスをインスタンス化します。構造体はそれを実装しません
Feb 08, 2024 pm 10:51 PM#php エディターの Youzi が、any を使用してユニバーサル インターフェイスをインスタンス化する方法を紹介し、struct がそれを実装しない理由を説明します。ジェネリック インターフェイスは、コードを記述するときにより柔軟な方法を使用できるようにする非常に便利なデザイン パターンです。ただし、共通のインターフェイスを使用する場合は、不要な問題を避けるためにいくつかの詳細に注意を払う必要があります。 any を使用して汎用インターフェイスを適切にインスタンス化する方法を見て、構造体がそれを実装しない理由を理解しましょう。
質問内容
*DataTo
が ToType[any]
を満たさない理由を誰か説明できますか?
すべての値をある構造体から別の構造体にコピーし、いくつかの明示的な値 (この場合は V
) を設定する DTOer
を構築してみます。
// You can edit this code! // Click here and start typing. package main import "fmt" type DataFrom struct { V1 int } type DataTo struct { V int } func (m *DataTo) SetVal() { m.V = 1 return } type ToType[T any] interface { SetVal() *T } type DTO[TFrom any, TTo ToType[any]] struct { Get func(from TFrom) TTo } func main() { dto := &DTO[DataFrom, *DataTo]{ Get: func(from DataFrom) *DataTo { return &DataTo{V: from.V1 + 666} }, } vFrom := DataFrom{V1: 1} vTo := dto.Get(vFrom) fmt.Println(vTo.V) }
anyは静的型であるためです。
ToType のようなジェネリック型をインスタンス化する場合、ジェネリック型は正確に
any を想定します。
リーリー
通常、any は空のインターフェース
interface{} のエイリアスであり、任意の型 All であるため、上記のように
any に任意の型を指定できます。空のインターフェイスを満たします。
*T) に使用される場合、
any を使用したインスタンス化は、
正確に *any## を意味します。 。したがって、
ToType[any] は同じものと考えることができます:
リーリー
したがって、
は明らかに *any
ではありません。詳細: 構造体ポインタをインターフェイス ポインタに割り当てる
構造体を次のように宣言すると、コンパイルされます:
または、より「一般的」かつより詳細な方法:
リーリー以上がany を使用して共通インターフェイスをインスタンス化します。構造体はそれを実装しませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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