Go 反射与 CGO 编程实战
反射与通道操作
反射在 Go 语言中提供了强大的功能,允许我们创建通道、发送和接收数据,还能使用select语句。
创建通道
可以使用reflect.MakeChan函数创建新的通道,该函数需要一个reflect.Type接口值和一个大小参数。示例代码如下:
func main() { t := reflect.ChanOf(reflect.BothDir, reflect.TypeOf("")) v := reflect.MakeChan(t, 0) fmt.Printf("%T\n", v.Interface()) }完整示例可参考:https://play.golang.org/p/7_RLtzjuTcz 。
发送、接收和关闭通道
reflect.Value类型提供了几个专门用于通道的方法,Send和Recv用于发送和接收数据,Close用于关闭通道。示例如下:
func main() { t := reflect.ChanOf(reflect.BothDir, reflect.TypeOf("")) v := reflect.MakeCh