美文网首页
Go Refletion 反射

Go Refletion 反射

作者: sirius_ztz | 来源:发表于2017-07-11 15:12 被阅读0次

Type

我们可以通过Tyepof来获取变量的值,但要区分type和kind,前者表示真实类型(静态类型),后者表示基础结构(底层类型)

type X int 

func main(){
    var a X=100
    t:=reflect.TypeOf(a)

    fmt.Println(t.Name(),t.Kind())
}

输出:

X int

方法Elem返回指针、数组、切片、字典(值)或通道的类型

func main(){
    fmt.Println(reflect.TypeOf(map[string]int{}).Elem())
    fmt.Println(reflect.TypeOf([]int32{}).Elem())
}

输出:

int
int32

Value

《The way to Go》中的一段代码:
通过反射来遍历struct

package main
import (
    "fmt"
    "reflect"
)
type NotknownType struct {
    s1, s2, s3 string
}
var secret interface{} = NotknownType{"Ada", "Go", "Oberon"}
func main() {
    value := reflect.ValueOf(secret)
    for i := 0; i < value.NumField(); i++ {
        fmt.Printf("Field %d: %v\n", i, value.Field(i))
        //也可以将value的值输出出来,当必须是类型一致,如
        fmt.Println(value.Field(i).String())
    }
}
type inter int
    var x inter=45
    var y float64 = 3.4


    fmt.Println("type:", reflect.TypeOf(x)) //reflect.TypeOf includes an empty interface
    //When we call reflect.TypeOf(x), x is first stored in an empty interface, which is then passed as the argument;
    fmt.Println("value:", reflect.ValueOf(x))
    fmt.Println("type:", reflect.TypeOf(y))

    //Both reflect.Type and reflect.Value have lots of methods to let us examine and manipulate them
    v := reflect.ValueOf(y) //得到Valueof变量
    fmt.Println("type:", v.Type())
    fmt.Println("kind is float64:", v.Kind() == reflect.Float64)
    fmt.Println("value:", v.Float())

    var z uint8 = 'x'
    h := reflect.ValueOf(z)
    fmt.Println("type:", h.Type())                            // uint8.
    fmt.Println("kind is uint8: ", h.Kind() == reflect.Uint8) // true.
    fmt.Println(h.Uint())          

相关文章

  • Go Refletion 反射

    Type 我们可以通过Tyepof来获取变量的值,但要区分type和kind,前者表示真实类型(静态类型),后者表...

  • golang 反射机制

    go语言也有反射机制,今天自学到go的反射,发现还是很值得记录一些这个知识点的。go语言它是通过 reflect ...

  • reflect.go包学习_之二 指针操作提高反射性能 反射应用

    reflect.go包学习_之二 指针操作提高反射性能 反射应用 反射创建实例 反射信息、反射调用方法、反射修改值...

  • go反射

    reflect[https://studygolang.com/pkgdoc]:在运行时动态的获取一个变量的类型信...

  • go 反射

    反射的概念 反射就是程序能够在运行时动态的查看自己的状态,比关切允许修改自身的行为。1、GO的反射基础是接口和类型...

  • Go反射

    1、chan类型

  • go 反射

    在面对类型时,我们要区分 Type 和 Kind,前者表示真实类型(静态类型),后者表示其基础结构(底层类型)类别...

  • Go: 反射

    反射是Go中的高级语法,本文将以尽可能用简单的方式来介绍它。本文包括以下部分: 什么是反射? 如何检查一个变量及其...

  • GO 反射

    虽然在大多数的应用和服务中并不常见,但是很多框架都依赖 Go 语言的反射机制简化代码。因为 Go 语言的语法元素很...

  • Golang 学习笔记十四 反射

    参考《快学 Go 语言》第 15 课 —— 反射反射是 Go 语言学习的一个难点,但也是非常重要的一个知识点。反射...

网友评论

      本文标题:Go Refletion 反射

      本文链接:https://www.haomeiwen.com/subject/rrcdqxtx.html