ホームページ > バックエンド開発 > Golang > インターフェイスの動的キャストを実行できますか? 実行できない場合、代替手段は何ですか?

インターフェイスの動的キャストを実行できますか? 実行できない場合、代替手段は何ですか?

Susan Sarandon
リリース: 2024-12-01 16:07:17
オリジナル
882 人が閲覧しました

Can Go Perform Dynamic Casting of Interfaces, and If Not, What's the Alternative?

Go でのインターフェイスの動的キャスト

Go では、開発者はインターフェイスを動的にキャストする必要性に直面することがよくあります。この記事では、これが実現可能かどうかを検討し、タイプ切り替えメカニズムを使用した解決策を提供します。

問題ステートメント

次のシナリオを考えてみましょう:

1

var intAge = interfaceAge.(int)

ログイン後にコピー

このコードは、interfaceAge が int インターフェイスであることを前提としています。ただし、実際には、interfaceAge のタイプはコンパイル時にはわからない場合があります。ここで疑問が生じます: インターフェイスを型付き変数に動的にキャストする方法はありますか?

動的キャスト

残念ながら、Go は静的に型付けされた言語です。変数の型はコンパイル時に固定されます。質問で示唆されているように、動的キャストは Go では不可能です。

型の切り替え

この制限を克服するには、型の切り替えを使用できます。タイプの切り替えにより、実行時にインターフェースのタイプを決定し、タイプ固有の操作を実行できます。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

var t interface{}

t = functionOfSomeType()

switch t := t.(type) {

default:

    fmt.Printf("unexpected type %T", t)       // %T prints whatever type t has

case bool:

    fmt.Printf("boolean %t\n", t)             // t has type bool

case int:

    fmt.Printf("integer %d\n", t)             // t has type int

case *bool:

    fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool

case *int:

    fmt.Printf("pointer to integer %d\n", *t) // t has type *int

}

ログイン後にコピー

このコードは、インターフェースのタイプを動的に決定し、タイプ固有の操作を実行する方法を示しています。{}タイプ切り替えを使用した操作。

以上がインターフェイスの動的キャストを実行できますか? 実行できない場合、代替手段は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート