Go ジェネリック: 無効な複合リテラル
php 編集者 Xigua が最新情報「Go Generics: Invalid Compound Literal」をお届けします。 Go 言語コミュニティでは、ジェネリックは常に大きな関心事のトピックです。 Go 1.18 のリリースにより、ジェネリックが Go 言語の標準ライブラリに正式に含まれるようになります。しかし、この決定は全員に受け入れられたわけではありません。この記事では、読者がこのテクノロジーをより深く理解し、実際の開発でのアプリケーションの参考となるように、Go 言語でのジェネリックスの実装と関連する論争や議論について説明します。
質問内容
次のコードでは「複合リテラル型 t が無効です」というエラーが発生します。
リーリー インターフェイス thing
に thing
のみを含める場合、または a string
と b int
を削除する場合、foo
と bar
はまったく同じであり、コードはエラーなしで実行されます。しかし、これはジェネリック医薬品の目的に反するのでしょうか?特にどのフィールドにもアクセスできない場合に、このようなジェネリック型をインスタンス化できないのはなぜですか?
https://github.com/golang/go/issues/48522 に関連する可能性があります
回避策
ほとんどのジェネリック型は、複合リテラルとして有効な型ではありません。ただし、ジェネリック型の値を作成する他の方法があるため、それは問題ではありません。
新しいゼロ値へのポインターを作成します:
リーリーまたは、ポインタ以外のゼロ値を作成します:
リーリーなぜこのようにエラーが発生するのかについては、仕様書からの説明を、特定の問題を解決するために修正したものです。
複合リテラルの場合 :
リテラルタイプのコア型 t は、構造体、配列、スライス、またはマップ型である必要があります
コアのタイプとは何ですか?
インターフェイス t は、[...] 単一の型 u が存在する場合、コア型を持ちます。これは、t の型セット内のすべての型の基礎となる型です他のインターフェイスにはコア タイプはありません。
基礎となるタイプは何ですか?
すべての型 t には基礎となる型があります。t が事前に宣言されたブール型、数値型、文字列型のいずれか、または型リテラルの場合、対応する基礎となる型は t 自体です。それ以外の場合、 t の基になる型は、宣言内で t によって参照される型の基になる型になります。「型リテラル」は、
struct{int id} などのリテラル構造型を参照できます。したがって、
foo と
bar の両方の
基礎となる型が
struct{int id} である場合、thing
core type は struct{int id}
であるため、複合リテラルが可能です。 foo と bar
が同じ基底型を持たない場合、thing
にはコア型がなく、複合リテラルは不可能であるため、エラーが発生します。
正式な定義は複雑に見えるかもしれませんが、結果と実際のポイントは単純です。汎用コードは、可能な型の一般的な動作のみを表現できます。リテラル値は、基礎となる型がすべて同じであるという特殊な場合を除いて、一般的な動作ではありません。
以上がGo ジェネリック: 無効な複合リテラルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

C言語標準ライブラリに「sum」という名前の関数はありません。 「合計」は通常、プログラマーによって定義されるか、特定のライブラリで提供され、その機能は特定の実装に依存します。一般的なシナリオは配列の合計であり、リンクリストなどの他のデータ構造でも使用できます。さらに、「sum」は、画像処理や統計分析などのフィールドでも使用されます。優れた「合計」関数は、優れた読みやすさ、堅牢性、効率を持つ必要があります。

言語のマルチスレッドは、プログラムの効率を大幅に改善できます。 C言語でマルチスレッドを実装する4つの主な方法があります。独立したプロセスを作成します。独立して実行される複数のプロセスを作成します。各プロセスには独自のメモリスペースがあります。擬似マルチスレッド:同じメモリ空間を共有して交互に実行するプロセスで複数の実行ストリームを作成します。マルチスレッドライブラリ:pthreadsなどのマルチスレッドライブラリを使用して、スレッドを作成および管理し、リッチスレッド操作機能を提供します。 Coroutine:タスクを小さなサブタスクに分割し、順番に実行する軽量のマルチスレッド実装。

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか?ゴーランドを使用するためにGolandを使用する場合、多くの開発者はカスタム構造タグに遭遇します...

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...
