空接口interface{}的使用

  interface{}是空接口,它还有一个别名any,Go官方推荐使用any替代interface{},为此还推出了gofmt命令来实现把代码里的interface{}全部替换成any。
 
  空接口类型变量可以保存任何数据类型的值,如下面的代码:
 
package main

import "fmt"

func main() {
   var a any

   a = 1024
   fmt.Println(a) // 1024

   a = "从入门到放弃"
   fmt.Println(a) // 从入门到放弃

   a = true
   fmt.Println(a) // true
}

  空接口能使数据抽象从而使用起来更灵活,但这也是它的缺点,因为抽象所以没有数据类型信息,在获取空接口类型变量的值时需要类型断言,如下面的代码:

package main

import "fmt"

func main() {
   var a any = 3.14

   // 断言空接口类型变量a为string类型(断言失败)
   var tmpStr, _ = a.(string)
   fmt.Printf("tmpStr = %+v \n", tmpStr) // tmpStr =

   // 断言空接口类型变量a为int类型(断言失败)
   var tmpInt, _ = a.(int)
   fmt.Printf("tmpInt = %+v \n", tmpInt) // tmpInt = 0

   // 断言空接口类型变量a为float64类型(断言成功)
   var tmpFloat64, _ = a.(float64)
   fmt.Printf("tmpFloat64 = %+v \n", tmpFloat64) // tmpFloat64 = 3.14
}

Copyright © 2024 码农人生. All Rights Reserved