1.国内下载前缀
[https://goproxy.io](https://goproxy.io/)
[https://athens.azurefd.net](https://athens.azurefd.net/)
[https://goproxy.cn](https://goproxy.cn/)
[https://gocenter.io](https://gocenter.io/)
[https://mirrors.aliyun.com/goproxy/](https://mirrors.aliyun.com/goproxy/)
2.golang泛型待当前无,可用interface替代
3.golang历史
- 2009.9 golang正式发布开源代码
- go1目标是梳理语法和标准库:
- 2012年给切片语法增加容量控制,避免不同切片访问有着相同底层数组的其他切片内存
- 2016年引入context包用来简化单个请求的多个gorouine之间与请求域的数据超时和退出操作,很多框架用来控制goroutine的生命周期
- 2017年引入类型别名,解决不同库之间相同变量的兼容问题,比如标准库和扩展库context.context重名问题
- 运行时问题
GC是垃圾回收,gc是编译器:
go1.2使用分段栈实现栈的动态伸缩,栈内存不连续会使cpu命中率下降,使热点函数的调用性能下降
go1.3使用连续动态栈,如此会导致栈的变量地址会因为栈的移动而变化,导致go的内存对象无法直接传递给c语言空间使用,为此制定复杂内存使用规范.
- GC性能改进
go中每个变量都有完备的元信息,通过此可以追踪到全部指针的生命周期
go1.4之前采用停止世界来回收,几秒到十几秒,并且全部是C语言实现;go1.5采用并发增量方式,并且采用c转换到go,以此知道了每个内存指针状态。
-- go2发展方向
- 2015年之前是各种报告巅峰,之后急剧下降
- go2最期待是泛型
之前用接口模拟泛型是借口,因为无法对接口返回值类型检查,支持泛型可能期待在cpu密集运算领域有所建树,纯go语言机器学习算法库出现
- Go语言对WebAssembly平台的支持
可能出现更轻量化的docker替代,或者变异版本的tinygo
-- go在中国
- 中国是go关注最多的国家,也是go贡献排名第二国家,许多人参与了go语言编写。
有疑问加站长微信联系(非本文作者)