golang学习笔记——类型断言
// 定义接口
type I interface {
M() int
}
// 定义两个结构体
type T struct {
S string
}
type S struct {
I
F float
}
// 为T和S分别实现M方法
func (t T) M() int {
return len(t.S)
}
func (s S) M() int {
return int(s.F)
}
func describe(i I) {
switch v := i.(type) {
case T:
fmt.Printf("I am a T with S = %s\n", v.S)
case S:
fmt.Printf("I am a S with F = %v\n", v.F)
default:
fmt.Printf("I don't know what I am\n")
}
}
func main() {
s := S{I: T{S: "Hello"}, F: 1.234}
describe(s) // 输出: I am a S with F = 1.234
}
这段代码首先定义了一个接口I
和两个结构体T
和S
。然后分别为它们实现了M
方法。describe
函数接受一个I
类型的参数,并使用类型断言来判断该参数的具体类型,然后输出相应的信息。在main
函数中,我们创建了一个S
类型的实例,并将其传递给describe
函数,展示了类型断言的使用方法。
评论已关闭