第 4 章 进阶——Go 语言高级特性 Go语音是一门静态强类型的语言,在程序编译的过程中会把变量的反射信息如字段类型、类型信息等写到可执行文件中。在程序执行过程中, Go语音虚拟机加载可执行文件中变量的反射信息,并提供接口用于在运行时获取和修改代码的能力。 Go语音支持两种并发模型,一种是我们常见的共享内存并发模型;另一种是基于Go语音推荐的CSP(顺序通信进程)并发模型。Go语音使用了一种 特殊的MPG线程模型,使得可以原生支持协程并发,大大提供了程序的执行效率。 4.1 依赖管理 4.1.1 包管理 4.1.2 GOPATH 4.1.3 Go Modules 4.2 反射基础 4.2.1 reflect.Type 类型对象 4.2.2 类型对象 reflect.StructField 和 reflect.Method 4.2.3 reflect.Value 反射值对象 【实例 4-1】使用反射调用接口方法 4.3 并发模型 4.3.1 并发与并行 并发不要求cpu具备多核计算的能力。 并行程序则要求cpu提供多核并行计算的能力。 并发程序的执行通常是不确定的,这种不确定来源于资源之间的互相依赖和竞态条件,这可能导致执行线程之间的互相等待,使得并发程序即使 在多核环境上也无法做到真正并行执行而降级为串行执行。 并行程序的每个执行模块在逻辑上是独立的,即线程执行时可以独立完成任务,从而可以做到同一时刻多个指令能够同时执行。 4.3.2 CSP 并发模型 Go语音实现了两种并发模型: 1.我们熟悉的线程与锁并发模型,它主要是依赖于共享内存实现。线程与锁模型类似于对底层硬件运行过程的形式化,程序的正确运行很大 程度上依赖于开发人员的能力和技巧,程序在出错时不易排查。 2.Go语音中提倡使用的CSP通信顺序进程模型。 CSP模型中存在两个关键的概念: 1.并发实体࿰