goの中でinterfaceの型変換をどのように実現するのか。
Go言語では、インターフェースの型変換には.(Type)またはType.(interface)を使用できます。
- (Type) 以下の文章を日本語で自然に言い換えてください。
var i interface{} = "Hello"
s := i.(string)
fmt.Println(s) // Output: Hello
n, ok := i.(int)
fmt.Println(n, ok) // Output: 0 false
- タイプ。(インターフェース)
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」と出力されます。