ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 类型开关 接口被以两种不同的方式使用: 1.在第一个方式中,以io.Reader,io.Writer,fmt.Stringer,sort.Interface,http.Handler,和error为典型,一个接口的方法表达了实现这个接口的具体类型间的相似性,但是隐藏了代表的细节和这些**具体类型本身的操作(方法)**。**重点在于方法上**,而**不是具体的类型**上。 2. 第二个方式利用一个接口值可以持有各种具体类型值的能力并且将这个接口认为是这些类型的union(联合)。类型断言用来动态地区别这些类型并且对每一种情况都不一样。在这个方式中,**重点在于具体的类型满足这个接口**,**而不是在于接口的方法**(如果它确实有一些的话),并且没有任何的信息隐藏。我们将以这种方式使用的接口描述为discriminated unions(可辨识联合)。 ~~~ var v interface{} v = true switch v := v.(type) { 使用v来接收断言的值,v此时是动态的,当case到之后,就会被断言为具体的类型 case string: fmt.Println("string") case int: fmt.Println("int") case bool: if v { //此时v的类型已经被断言为bool类型了,可以直接进行判断 fmt.Println("true") } else { fmt.Println("false") } } ~~~