反射、协程及错误与异常|青训营笔记

85 阅读1分钟

reflect包

Go语言提供了一种机制,能够在运行时更新变量和检查它们的值、调用他们的方法和它们支持的内在操作, 而不需要在编译时就知道这些变量的具体类型,这种机制被称为反射

在Go中reflect包实现了运行时反射。reflect包会帮助识别interface{}变量的底层具体类型和具体值

在反射前的环境里,type和value是合并在一起组成接口变量的

在反射后的环境里,type和data是分开的 分别由reflect.Type和reflect.Value来表示

反射第一定律- 反射可以将“接口类型变量”转换为“反射类型变量”

Go语言类型是值传递,会将接口隐式的转换成接口类型

反射第二定律- 反射可以将“反射类型变量”转换为“接口对象”

反射第三定律- 如果要修改“反射类型对象”其值必须是“可写的” package main

WaitGroup 等待一组任务结束,再执行其他业务逻辑

在实际开发中我们并不能保证每个协程执行的时间,如果需要等待多个协程,全部任务结束 后,再执行某个业务逻辑,那么我们就会用到waitgroup这种处理方式

Add() 初始值是0,累加子协程的数量

Done() 当某个子协程完成后,计数器减去1,通常用defer调用

Wait() 阻塞当前协程,直到实例中的计数器归零。

错误与异常

错误指的是可能出现问题的地方出现了问题,异常指的是不应该出现问题的地方出现了问题 Go语言中使用panic表示异常的信息