go(9)-pair-reflect

变量的结构
1.基本数据类型pair的使用
2.类中pair的使用
3.反射reflect


变量结构

1.基本数据类型

package main
import"fmt"
func basefun(){
   
   //pair<statictype:string,value:"aceld">
   var a string
   a="aceld"

   //pair<type::string,value:"sceld">
   //interface这个万能类型
   var allType interface{}
   allType=a 

   str,_!=allType.(string)
   fmt.Println(str)

}

func osfun(){
   //tty:pair<type:*os.File,value:"/dev/tty"文件描述符>
   tty,err :=os.OpenFile("/dev/tty",os.O_RDWR,0)

   if err !=nil{
      fmt.Println("open file error",err)
      return
  }

  //r:pair<type:,value>
  //tty:pair<type:*os.File,value:"/dev/tty"文件描述符>
  var r io.Reader
  r=tty

  //w:pair<type:,value>
  //tty:pair<type:*os.File,value:"/dev/tty"文件描述符>
  var w io.Reader
  w=r.(io.Writer)
  w.Write([]byte("hello this is a test!\n"))
}

2.类中pair的使用

 

package main
import "fmt"
type Reader interface{
   ReadBook()
}

type Writer interface{
   WriteBook()
}
//具体类型
type Book struct{
}

func(this *Book)ReadBook(){
   fmt.Println("Read a Book")
}

func(this *Book)WriteBook(){
   fmt.Println("Write a Book")
}

fun main(){
   //b:pair<type:Book,value:book()>
   b :=&book{}

   //r:pair<type:,value:>
   var r Reader
   //r:pair<type:Book,value:book()>
   r=b
   r.ReadBook()
}

3.反射 reflect包
     辨识当前的数据类型 
     func Vauleof(i interface()) Value{...}//数据值    0
     func Typeof(i interface())  Type{...} //数据类型  nil

3.1反射一个基本类型

package main
import(
    "fmt"
    "reflect"
)
//反射一个基本类型
func reflectNum(arg interface{}){
   fmt.Println("type:",reflect.TypeOf(arg))
   fmt.Println("value:",reflect.ValueOf(arg))
}
func mainsimple(){
     
     var num float64 =1.2345
     reflectNum(num)
     //反射一个复杂类型
     
}


3.2反射一个复杂的类型
 

package main
import(
    "fmt"
    "reflect"
)

type User struct{
  Id int
  Name string
  Age int
}
//打印自己
func(this *User) Call(){
    fmt.Println("user is called ..")
    fmt.Printf("%v\n",this)   //打印自己

}

func main(){
     
   user :=User{1,"Aceld",18}
    DoFileAndMethod(user)
}
func DoFileAndMethod(input interface{}){
    //1.获取input type 和value
     inputType :=reflect.TypeOf(input)
     inputValue :=reflect.ValueOf(input)
     fmt.Println("inputType is :",inputType.Name())
     fmt.Println("inputType is :",inputValue )


    //2.通过type 获取字段、方法、调用
     for i:=0;i<inputType.NumField();i++ {
         field :=inputType.Field(i)
         value  :=inputValue.Field(i).Interface()
         fmt.Printf("%s: %v= %v\n",field.Name, field.Type,value)
   }
  //通过type 获取里面的方法、调用
    for i:=0;i<inputType.NumMethod();i++ {
         m :=inputType.Method(i)
         fmt.Printf("%s: %v= %v\n",m.Name, m.Type)
     }

}



 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值