简单记录下平时开发对类型断言(Type Assertion)的使用场景。
golang里的所有类型都实现了空接口interface{},所以通常将它作为一个函数的参数或者结构体的字段,以实现对类型的抽象。
1.用于转换函数里interface{}类型的参数
举个简单栗子:
package main
import "fmt"
func main() {
add(1, 2)
add(int16(1), int16(2))
add(float32(1.1), float32(2.2))
add(float64(1.1), float64(2.2))
add(true, false)
}
func add(a, b interface{}) {
switch t := a.(type) {
case int:
fmt.Printf("type [%T] add res[%d]\n", t, a.(int)+b.(int))
case int16:
fmt.Printf("type [%T] add res[%d]\n", t, a.(int16)+b.(int16))
case float32:
fmt.Printf("type [%T] add res[%f]\n", t, a.(float32)+b.(float32))
case float64:
fmt.Printf("type [%T] add res[%f]\n", t, a.(float64)+b.(float64))
default: