1 Star 0 Fork 417

刘琦 / go-course

forked from infraboard / go-course 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
hello_go.md 5.58 KB
一键复制 编辑 原始数据 按行查看 历史
Mr.Yu 提交于 2021-05-29 19:52 . 补充文档

初识Go语言

历程

Go 语言是由谷歌的开发工程师(罗伯特·格瑞史莫、罗勃·派克、肯·汤普逊等)于 2007 年 开始设计,利用 20%的自由时间开发的实验项目,并于 2009 年以 BSD-style 授权(完全开 源)首次公开发布,于 2012 年正式发布

历史上的Go版本: https://golang.google.cn/doc/devel/release.html

  • go1.16 (released 2021/02/16)
    • runtime/metrics
    • GO111MODULE的默认值为on, 可以把GO111MODULE设置回auto
    • io/ioutil为废弃,函数被转移到了os和io这两个包里
    • 1.16优化了链接器,现在它在linux/amd64上比1.15快了20-25%,内存占用减少了5-15%
  • go1.15 (released 2020/08/11)
    • Go 1.15版本不再对darwin/386和darwin/arm两个32位平台提供支持
    • 新版linker的起点,新链接器的性能要提高20%,内存占用减少30% 后续持续优化
    • GOPROXY支持设置为多个proxy的列表,多个proxy之间采用逗号分隔,默认值依旧为https://proxy.golang.org,direct
  • go1.14 (released 2020/02/25)
    • Go Module 已经可以用于生产环境
    • defer zero overhead
  • go1.13 (released 2019/09/03)
    • 重写了逃逸分析,减少了 Go 程序中堆上的内存申请的空间,1.3版本被诟病后改了
    • defer 性能提升30%
    • GO111MODULE auto
  • go1.12 (released 2019/02/25)
    • 内存分配优化
    • GO111MODULE off
  • go1.11 (released 2018/08/24)
    • Go modules, 社区积怨已久
    • 实验性的 WebAssembly
  • go1.10 (released 2018/02/16)
    • gc快优化到头了
    • 为了加快构建速度,go build 引入了构建缓存
  • go1.9 (released 2017/08/24)
    • type alias
    • Concurrent Map sync.Map结构
  • go1.8 (released 2017/02/16)
    • gc 的停顿时间减少到了 1 毫秒以下(100 microseconds and often as low as 10 microseconds)
    • defer 开销降低到原来的一半
  • go1.7 (released 2016/08/15)
    • 对编译工具链也作了优化,编译速度更快
    • gc进一步提升
    • Context包推出 对goroutine的生命周期管理提出的标准方案
  • go1.6 (released 2016/02/17)
    • gc进一步提升
  • go1.5 (released 2015/08/19) 发布时间推迟了两个月2个大招
  • go1.4 (released 2014/12/10)
    • 继续优化GC, go generate诞生
  • go1.3 (released 2014/06/18)
    • 尝试优化GC,同时推出了 sync.Pool
  • go1.2 (released 2013/12/01) 语言层面的优化
    • 基础库的性能提升
    • SetMaxThreads defaults (10000)
  • go1.1 (released 2013/05/13)
  • go1 (released 2012/03/28)

优势

  • 简单的部署方式

    • 可直接编译成机械码
    • 不依赖其他库
    • 直接运行即可部署
  • 静态类型语言

    • 编译的时候可以检测出隐藏的大多数问题
    • 强类型方便阅读与重构
  • 语言层面的并发

    • 天生的基于支持
    • 充分利用多核
  • 工程化比较优秀

    • GoDoc 可以直接从代码和注释生成漂亮的文档
    • GoFmt 统一的代码格式
    • GoLint 代码语法提示
    • 测试框架内置
  • 强大的标准库

    • Runtime系统调度机制
    • 高效的GC垃圾回收
    • 丰富的标准库
  • 简单易学

    • 25个关键字
    • C语言简洁基因,内嵌C语言语法支持
    • 面向对象特征(继承, 多态,封装)
    • 跨平台

缺陷

  • 包管理, 大部分都在 github上

    • 作者修改项目名称
    • 作者删库跑路
    • vendor 到 mod 迁移麻烦,很多遗留依赖问题
  • 无泛型, 2.0 有计划加上 (传言)

    • interface{}可以解决该问题, 但是不易于代码阅读
  • 没有Exception,使用Error来处理异常

    • error处理不太优雅, 很多重复代码

应用

Go 语言主要用于服务端开发,其定位是开发大型软件,常用于:

  • 服务器编程:日志处理、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等
  • 网络编程:Web 应用、API 应用、下载应用
  • 内存数据库
  • 云平台
  • 机器学习
  • 区块链
  • ……

使用 Go 开发的项目列表:https://github.com/golang/go/wiki/Projects

  • Go
  • docker
  • kubernetes
  • lantern
  • etcd
  • Prometheus
  • Influxdb
  • Consul
  • nsq
  • nats
  • beego
  • ……

使用 Go 开发的组织:http://go-lang.cat-v.org/organizations-using-go

  • 国外:Google、CloudFlare……
  • 国内:阿里、腾讯、百度、京东、爱奇艺、小米、今日头条、滴滴、美团、饿了么、360、七牛、B 站、盛大、搜狗……

学习Golang的一些方法

作业

  • 完整阅读完go官方所有版本的变更说明, 熟悉每个版本的特性与改进
Go
1
https://gitee.com/bhliuyou/go-course.git
git@gitee.com:bhliuyou/go-course.git
bhliuyou
go-course
go-course
master

搜索帮助