Go学习笔记(八)

258 阅读2分钟

(文章持续更新中...有志同道合的人可以一起探讨下。整个系列(1~8)准备重写,不过都是很基础的入门笔记,想学到很深入的东西则不建议阅读...)

反射是指在程序运行期对程序本身进行访问和修改的能力,使用 reflect.TypeOf() 函数可以获得任意值的类型对象(reflect.Type)

const (
    Invalid Kind = iota  // 非法类型
    Bool                 // 布尔型
    Int                  // 有符号整型
    Int8                 // 有符号8位整型
    Int16                // 有符号16位整型
    Int32                // 有符号32位整型
    Int64                // 有符号64位整型
    Uint                 // 无符号整型
    Uint8                // 无符号8位整型
    Uint16               // 无符号16位整型
    Uint32               // 无符号32位整型
    Uint64               // 无符号64位整型
    Uintptr              // 指针
    Float32              // 单精度浮点数
    Float64              // 双精度浮点数
    Complex64            // 64位复数类型
    Complex128           // 128位复数类型
    Array                // 数组
    Chan                 // 通道
    Func                 // 函数
    Interface            // 接口
    Map                  // 映射
    Ptr                  // 指针
    Slice                // 切片
    String               // 字符串
    Struct               // 结构体
    UnsafePointer        // 底层指针
)

Go 语言中的类型名称对应的反射获取方法是 reflect.Type 中的 Name() 方法,返回表示类型名称的字符串。

类型归属的种类(Kind)使用的是 reflect.Type 中的 Kind() 方法,返回 reflect.Kind 类型的常量

反射不仅可以获取值的类型信息,还可以动态地获取或者设置变量的值。Go 语言中使用 reflect.Value 获取和设置变量的值

Go 语言中,使用 reflect.ValueOf() 函数获得值的反射值对象(reflect.Value)

value := reflect.ValueOf(rawValue)

如果反射值对象(reflect.Value)中值的类型为函数时,可以通过 reflect.Value 调用该函数。使用反射调用函数时,需要将参数使用反射值对象的切片 []reflect.Value 构造后传入 Call() 方法中,调用完成时,函数的返回值通过 []reflect.Value 返回

+=================================================+

Go 语言中使用 go build 命令将源码编译为可执行文件

go run 命令会编译源码,并且直接执行源码的 main() 函数,不会在当前目录留下可执行文件.,可执行文件被放在临时文件中被执行,工作目录被设置为当前目录

go install 的功能和 go build 类似,附加参数绝大多数都可以与 go build 通用。go install 只是将编译的中间文件放在 GOPATH 的 pkg 目录下,以及固定地将编译结果放在 GOPATH 的 bin 目录下

go get 可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装

Go 语言工具链中的 go pprof 可以帮助开发者快速分析及定位各种性能问题,如 CPU 消耗、内存分配及阻塞分析