Go语法进阶|青训营

80 阅读2分钟

1.反射机制

1.1反射

反射可以在运行时动态获取各种变量的信息,比如变量的类型和值等
如果是结构体还可以获取到结构体本身的各种信息,比如结构体的字段和方法。

1.2为什么使用反射

1.2.1 有时你需要编写一个函数,但是并不知道传给你的参数类型是什么,参数类型并不能明确表示。 1.2.2 有时候需要根据某些条件决定调用哪个函数,比如根据用户的输入来决定。

1.3缺点

1.3.1 与反射相关的代码,经常是难以阅读的。 1.3.2 Go 语言是一门静态语言,编码过程中,编译器能提前发现一些类型错误,但是对于反射代码是无能为力的。所以包含反射相关的代码,很可能会运行很久,才会出错。 1.3.3 影响代码运行速度,对于项目中决定整体速度的关键代码处,尽量少使用反射特性。

package main

import (
	"fmt"
	"reflect"
)

func main() {
	var a float64
	a = 3.14
	//通过反射可以获取一个变量的  类型和数值
	fmt.Println(reflect.TypeOf(a))
	fmt.Println(reflect.ValueOf(a))

	//根据反射的值  来获取对应的数值和类型
	v := reflect.ValueOf(a)
	//种类
	if v.Kind() == reflect.Float64 { //Kind种类 相当于 struct  Type类型相当于User类 
		fmt.Println("v是一个float64类型")
	}
	fmt.Println("类型是:", v.Type())
	fmt.Println("数值是:", v.Float())
}

2.Go常使用包

2.1 init函数

init函数先于main函数执行,实现包级别的一些初始化操作。 在main包下导入另一个包时,如果该包下有init函数(没有接着导入包)就会先执行这个包下的init函数,再执行main方法里面的函数。如果在main方法的上面有init函数的话,就会执行导入的包中的init函数,再main方法上面的函数,最后再是main方法里面程序。

待续----------------------------------------