接口底层是结构听,怎么拿出结构体的字段
时间: 2024-02-20 16:56:16 浏览: 13
在 Go 中,如果一个结构体实现了某个接口,那么这个结构体的类型就是该接口类型,也就是说它可以被赋值给该接口类型的变量。但是在这种情况下,如果我们想要访问结构体的字段,需要进行类型断言。
例如,假设有如下的代码:
```
type Person struct {
Name string
Age int
}
func (p Person) SayHello() {
fmt.Printf("Hello, my name is %s, I'm %d years old.\n", p.Name, p.Age)
}
var p interface{} = Person{"Alice", 25}
```
在上面的代码中,我们定义了一个 `Person` 结构体和一个 `SayHello` 方法,还定义了一个空接口变量 `p`,并将一个 `Person` 类型的值赋值给它。现在,如果我们想要访问 `p` 的 `Name` 字段,可以进行如下的类型断言:
```
if person, ok := p.(Person); ok {
fmt.Println(person.Name)
}
```
在上面的代码中,我们使用了 `.(Person)` 对 `p` 进行了类型断言,并将结果赋值给变量 `person`。如果类型断言成功,那么 `person` 的类型就是 `Person`,可以直接访问 `Name` 字段。如果类型断言失败,那么 `ok` 的值为 `false`,`person` 的值为 `Person` 的零值,也就是 `""` 和 `0`。