У меня 2 разные версии API, пытаюсь рефакторинг кода, чтобы избежать дублирования. В моем методе я могу получить объект из V1 или V2 (которые имеют одинаковые свойства). и я хочу получить доступ к этим свойствам, в настоящее время я получаю следующую ошибку:
i.name undefined (type interface {} is interface with no methods)
package main
import "fmt"
type V1 struct {
name string
age int
address string
}
type V2 struct {
name string
age int
}
func main() {
v1 := &V1{name: "Susan", age: 15}
describe(v1)
v2 := &V2{name: "John", age: 21}
describe(v2)
}
func describe(i interface{}) error {
fmt.Printf("(%v, %T)\n", i, i)
switch v := i.(type) {
default:
return fmt.Errorf("Error detected, unexpected type %T", v)
case *V1:
fmt.Println("*V1")
i = i.(*V1)
case *V2:
fmt.Println("*V2")
i = i.(*V2)
}
fmt.Println(i.name)
return nil
}
Есть предложения?