• Go 调试
  • 特点
    • 易工程化
      • 简单性而不方便性,避免工程复杂性乘法增长 # 某部分变复杂,增加其他部分的复杂性(功能、选项、配置)
        • 没有动态库, 没有泛型, 没有继承, 没有异常, 没有宏,没有注解,没有线程局部存储
      • 类型系统,无类型风格
      • 自然方式工作
        • 不显式初始化和隐式构造函数
        • 集合直接持有元素
      • 标准库避免配置和解释 # 自带电池
      • 项目结构简单
      • 编译检查代码格式
    • CSP
    • 编译为本地机器码 # 像c一样,所以又叫类c语言
      • 编译快
        • 引用包名在头
        • 包依赖有向无环,可独立和并行编译
        • 目标文件包含依赖包信息
    • 强静态类型
    • 有GC
    • 变长栈,最小2kb, 最大1GB
    • 大厂支持
  • 历史
    • 2007年设计,受影响于Alef(CSP系列), Oberon-2(ALGOL60, Modula-2系列), C
      • 目的解决google许多复杂性激增的软件系统
    • 2009年发布, 作者是Robert Griesemer, Rob Pike, Ken Thompson
    • 2012年1.0
  • 并发编程
    • Go特点
      • 语言层面关键字
      • 例程
        • 流程控制: csp # channel为一等公民
        • 通信方式: promise-future, channel, event
      • 高效调度模型(调度器,资源占用小)
        • O(1)的调度
        • 一进程可支撑上百万例程,5kib/goroutine的开销,
          • 变长栈存goroutine
  • 编译
    • CGO_ENABLED=0
      • 静态链接,不跨平台
    • 初始化
      • 包级别初始化在main前
      • 局部变量在函数执行时
  • 配置
    • GOROOT # go安装目录
    • GOPATH # 包目录, 默认要有go的bin目录
    • GOBIN # 当前bin目录
    • GO15VENDOREXPERIMENT # 依赖目录
    • GOOS # 指定操作系统, 如android, linux, darwin, windows
    • GOARCH # 处理器架构,如amd64, 386, arm
  • Go 命令
  • Go 工具
  • Go 语法
  • Go API
  • Go 库
  • Go 测试
  • Go 并发编程