goの中でinterfaceの型変換をどのように実現するのか。

Go言語では、インターフェースの型変換には.(Type)またはType.(interface)を使用できます。

  1. (Type) 以下の文章を日本語で自然に言い換えてください。
var i interface{} = "Hello"
s := i.(string)
fmt.Println(s) // Output: Hello

n, ok := i.(int)
fmt.Println(n, ok) // Output: 0 false
  1. タイプ。(インターフェース)
var s string = "Hello"
i := interface{}(s)
fmt.Println(i) // Output: Hello

タイプアサーションを使用してインターフェースが特定のタイプに変換できるかを判断する前に、アサーションが失敗したり変換が失敗したりすると実行時エラーが発生する可能性があることに注意する必要があります。 不要な返り値を無視するために、アンダースコア(_)を使用することもできます。

var i interface{} = 42
if s, ok := i.(string); ok {
    fmt.Println(s) // Output: 42
} else {
    fmt.Println("Conversion failed")
}

その他にも、複数のタイプのアサーションを行うためにswitch文を使用することができます。

var i interface{} = 42

switch v := i.(type) {
case int:
    fmt.Println("Integer:", v)
case string:
    fmt.Println("String:", v)
default:
    fmt.Println("Unknown type")
}

上記のコードは、iのタイプに応じて異なる処理を行います。 iがint型の場合、「Integer: 42」と出力されます。 iがstring型の場合、「String: 42」と出力されます。それ以外の場合は「Unknown type」と出力されます。

bannerAds