Goインターフェースから構造体への変換方法は?
Go言語では、型アサーションによってインターフェイスを実装したオブジェクトを、そのインターフェイスに対応した構造体に変換できます。具体的には、次のステップに従います。
- まず, 下記のように, インタフェースと構造体を定義します:
type MyInterface interface {
GetData() string
}
type MyStruct struct {
Data string
}
func (s *MyStruct) GetData() string {
return s.Data
}
- インターフェースを実装したオブジェクトを作成し、そのオブジェクトを変数に代入する(例えば、)
var myInterface MyInterface = &MyStruct{Data: "Hello, World!"}
- インターフェイスを構造体に変換するには、型アサーションを使用できます。構文は次のとおりです:
myStruct, ok := myInterface.(*MyStruct)
型変換は、変換された構造体オブジェクトと、ブール値を返します。ブール値が true の場合、型変換は成功し、変換された構造体オブジェクトを安全に使用できます。ブール値が false の場合、型変換は失敗しています。
完全なサンプルコードは以下のとおりです:
package main
import "fmt"
type MyInterface interface {
GetData() string
}
type MyStruct struct {
Data string
}
func (s *MyStruct) GetData() string {
return s.Data
}
func main() {
var myInterface MyInterface = &MyStruct{Data: "Hello, World!"}
myStruct, ok := myInterface.(*MyStruct)
if ok {
fmt.Println("转换成功")
fmt.Println(myStruct.GetData())
} else {
fmt.Println("转换失败")
}
}
このコードを実行すると、次の出力が表示されます。
转换成功
Hello, World!
構造体にインターフェースを上手いこと変換できた