码迷,mamicode.com
首页 > 其他好文 > 详细

go面向对象3

时间:2021-04-13 12:19:31      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:类型   animal   range   一个   基本数据类型   switch   interface   UNC   print   

类型断言

.(type)   来实现    其中  type 对应的就是要断言的类型

接口类型断言

var  num1 Number = 1

var num2 Number2  = &num1

if num3,ok := num2.(Number1);ok {

  fmt.Println(num3.Equal(1))

}

 

结构体类型断言

type IAnimal interface {

  GetName() string

  Call() string

  FavorFood() string

}

var animal = NewAnimal("蓝猫")

var  pet = new Pet("蓝白")

var ianimal INamial = NewDog(&animal,pet)

if dog,ok := ianimal.(Dog); ok {

  fmt.Println(dog.GetName())

}

 

基于反射动态断言类型

func  myPrintf(args ...interface{}) {

  for _,arg := range args {

    swich reflect.TypeOf(arg).kind(){

    case reflect.Int:

      fmt.Println(arg,"is an int value")

    case reflect.Array:

      fmt.Println()

    default :

    }

  }

}

如果要获取 ianimal的实际类型 可以使用   reflect.Typeof(ianimal)   获取

 

对于基本数据类型  比如int  string  bool 不必通过反射 直接使用variable.(type)

  switch arg.(type)

 

 

空接口,反射  和泛型

interface{}    

空接口和接口零值不是一个概念      前者是interface{}     后者是nil

 

空接口基本使用

空接口可以是指向任意类型变量

var v1  interface{} = 1

var v2  interface{} = true

复合类型

var v3 interface{} = struct{

  id int,

  name string

}{1,"fly"}

 

声明任意类型参数

func Printf(ftm string ,args ...interface{})

 

func Println(args ...interface{})  ...

 

func (p *pp) PrintArg(arg interface{},verb rune)

 

实现更灵活的类型断言

var animal = NewAnimal("蓝猫")

var  pet = NewPet("蓝白猫")

var any  interface{} = NewDog(&animal,pet)

if dog,ok := any.(Dog);ok {

  

}

 

反射 

通过反射 可以在运行时动态的获取变量的类型和结构信息

非常典型的应用场景是ioc容器

 

reflect

 

go面向对象3

标签:类型   animal   range   一个   基本数据类型   switch   interface   UNC   print   

原文地址:https://www.cnblogs.com/fly-fly-fly-fly/p/14649449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!