Go语言发展状况和前景
在2015年10月16日,技术大牛许式伟做了有关Go语言发展状况的演讲。
“
1 大纲
. Go语言语法及标准库变化
. Go语言未来发展的判断
. Go语言开源项目
1.1Go语言语法及标准库变化
1.1.1 Go1.1
• 语言变化
– 支持方法值(Method values)
•p.Write 等价于:
func(b []byte) (int, error) {
return p.Write(b)
}
•区别于方法表达式(Method expressions):
(*Foo).Write,结果类型为 func(p *Foo, b []byte) (int, error)
– int,uint 类型长度调整
•自 Go1.1 后,int,uint 的尺寸统一是 64bits,即使是在 32bits 平
台下。
– go1.1 编译条件
•在 go1.1 或以上的版本 编译:
// +build go1.1
• 性能
– 更多内联(inline):append, 接口类型转换
– 全新实现 map,更小的内存占用和CPU开销
– GC 性能优化
– 网络库性能优化:减少上下文切换
• 标准库/工具
– 一些尚未稳定的库从标准库移除
• 迁移到 code.google.com/p/go.exp 或 code.google.com/p/go.text 中
– 新增的包(package)
• go/format
• net/http/cookiejar
• runtime/race
• 详细信息http://tip.golang.org/doc/go1.1
1.1.2 Go1.2
• 语法变化
– 三下标切片(Three-index slices):array[begin:end:endcap]
– cgo 支持 C++
• 性能
– 标准库 compress/bzip2, crypto/des, encoding/json 性能优化
• 标准库/工具
– 新增的包(package):encoding, image/color/palette
– godoc, vet 工具从 go 发布中移出,迁移到
• code.google.com/p/go.tools/cmd/godoc
• code.google.com/p/go.tools/cmd/vet
– 测试覆盖率
• code.google.com/p/go.tools/cmd/cover
• 详细信息
– http://tip.golang.org/doc/go1.2
1.1.3 Go1.3
• 语法变化:无
• 实现细节
– GC•
Go1.3以前,垃圾回收对指针的判断是经验性的:如果某个整数值恰
巧是一个合法的指针,那么它会被当做指针处理
• Go1.3调整为精确GC,这会导致以前的有些编程手法失效:
– 如果有人意图把指针存储到uintptr而不是unsafe.Pointer,那么这块内存
无法保证不被回收
– 使用unsafe.Pointer存储整数也不会是一个好主意,因为这会干扰GC对真
相的理解
– map的遍历次序
• Go1标准指出:对map的多次遍历不应该假设有同样的次序
• 为了避免这样的假设发生,Go1.0遍历map选择起点时用了随机数
• Go1.1用重新实现map后,小map的遍历没有引入随机数;Go1.3重新
引入,以消灭此类潜在bug
实现细节
– cgo 变化:C类型不再允许跨包访问
• 例如,如果某个函数有 *C.FILE 参数,那么这个函数无法在其
他包中使用(会编译失败)
– 如果认为此代码是合理的,可将其调整为 unsafe.Pointer
• 性能
– 大大降低 defer 的内存开销
– 引入并行 GC 算法,大幅度改善 GC 效率
– 竞争检测算法(race detector) 大幅提速
– 优化 regexp 包,改善大部分简单正则表达式的性能
• 标准库/工具
– 新增的包(package):debug/plan9obj
1.1.4 Go1.4
语法变化
– 增加一种非常小概率使用的for range语法
for range x { … } 等价于 for _ = range x {…}
– 不再自动对 **T 进行解引用(dereference)
•对 var x **T,以前可直接用 x.Fn() 调用 T 的方法
– 现在需要明确写 (*x).Fn()
– 引入 internal package 概念
•在 Go1.4 只对主路径($GOROOT)有效,未来会全面应用到$GOPATH
– 引入 canonical import paths (权威导入路径) 概念
•package pdf // import "rsc.io/pdf"
• 实现细节
– 开始支持 Android (编译出binary或.so)
– 运行时(runtime)
•大部分用Go重写(以前是C),好处:更加精确的GC
•放弃了分段栈(segmented stack)
1.1.5 Go1.5
• 语法变化
– map 字面量简化写法
var x = map[Point]int{
{1.0, 2.1}: 1,
{2.3, 4.5}: 2,
}
• 实现细节
– 自举:不再有C,所有代码(包括编译器、链接器和运行
时)都用Go和少量汇编实现
– GC:重写GC,进一步降低GC的latency
– GOMAXPROCS 默认是 CPU 数(以前是1)
– 开始支持 iOS
•为此 Go team 还提交了第一个 Go 写的 AppStore 应用 Ivy
1.1.6 Go语言演进
• 语法变化
– 几乎没有增加什么显眼的语法特性,变化主要
围绕:
• 降低心智负担
• 细节完善
• 工程化
• Go本身的迭代的核心是实现优化,围绕:
– 性能,性能,性能!
• 性能优化,尤其是GC
– 更多平台的移植
– 更进一步的标准化,强化社区约定
1.2 Go语言未来发展的判断
• 关于语言特性
– Go语言3年发布了5个大版本,语言特性没有实质性的
变化,是不思进取,还是深思熟虑?
• 判断:别说3年,未来10年也不要指望Go语言特性有重大变化
(泛型是唯一变数,但引入的可能性不是很大)。与其说是不思
进取,还不如说是自信(对需求透彻理解后的强烈自信)。
• 关于Go语言的演进方向
– 3到5年内,Go的主攻方向仍然是服务端开发
• 比如内建 http 2.0 的支持 (更多的支持会以独立的开源库方式
提供,未必直接包含在 Go 的发布包)
• 尽管Go已经开始支持桌面端(Mobile)开发,但这仍然只是探索
性和经验性的
– 站在10年的维度,Go语言会在桌面端(Mobile)大放异彩,
占据重要地位
1.2.1 Go的评论
• Go语言将登上语言榜的首位,超过C和Java
– 许式伟,2012年2月,新浪微博 &《Go语言编程》序言
– http://weibo.com/1701886454/y7pROzJJj
• Go语言将在两年内制霸云计算
– 前VMware云平台CTO Derek Collison,2012年9月
– https://twitter.com/derekcollison
• Prediction: Go will become the dominant language for systems
work in IaaS, Orchestration, and PaaS in 24 months. #golang
• Go将统治下一个10年
– DeferPanic 创始人Ian Eyberg,2015年9月
– https://www.linkedin.com/pulse/go-dominate-nextdecade-ian-eyberg
1.2.2 大牛点评
1.3 Go语言开源项目
1.3.1 云计算领域
– 容器(及相关):runc, docker, coreos, codetainer, kitematic
– 微服务(含自动化部署/服务发现/调度器/etc):flynn, tsuru, deis, otto,
terraform, consul, skydock, nomad, kubernetes
– 数据库(及相关): etcd (键值), boltdb (键值/事务), cayley(图),
prometheus/seriesly (时间序列), cockroachdb, TiDB, influxdb, goleveldb,
vitess, reborndb, pgweb, beedb
– 其他:skydns, gryffin (Web安全), bosun (监控)
1.3.2 开发框架&工具
– Web框架:utron, gin, revel, beego
– 反向代理:traefik, v2ray
– Git相关:git-lfs, gogs
– 其他:sift (grep的替代品),gologin(授权), lantern, gotty, gowalker
1.3.3 开源应用
– 同步型网盘:syncthing
– 编辑器:lime
”
小编我突破中国长城防火墙,看了一下有关Golang的发展趋势图。
请看上图,Golang必将成为主流啊。O(∩_∩)O哈哈~,暂时未必吧。
中国人开发人员太多了吗?有点原因吧,如果没有GFW,是不是会更火爆呢?
欢迎关注我的微信公众号
转载于:https://my.oschina.net/abcijkxyz/blog/721755
Go语言发展状况和前景相关推荐
- 全球及中国甲苯二异氰酸酯预聚物行业投资状况与前景建议研究报告2022版
全球及中国甲苯二异氰酸酯预聚物行业投资状况与前景建议研究报告2022版 --------------------------------------- <修订日期>:2021年12月 &l ...
- 全球及中国BTK抑制剂市场发展状况与投资前景建议报告2022-2028年
全球及中国BTK抑制剂市场发展状况与投资前景建议报告2022-2028年 详情内容请咨询鸿晟信合研究院! [全新修订]:2022年2月 [撰写单位]:鸿晟信合研究研究[报告目录] 1 BTK抑制剂市场 ...
- 2022年全球及中国酰氯行业投资竞争力与发展状况分析报告
2022年全球及中国酰氯行业投资竞争力与发展状况分析报告 --------------------------------------- <修订日期>:2021年12月 <报告价格& ...
- 全球及中国深紫外LED行业盈利状况与前景动态研究报告2022版
全球及中国深紫外LED行业盈利状况与前景动态研究报告2022版 --------------------------------------- [修订日期]:2021年12月 [搜索鸿晟信合研究院查看 ...
- 全球及中国冠状动脉内支架行业运行现状与十四五发展状况分析报告2022版
全球及中国冠状动脉内支架行业运行现状与十四五发展状况分析报告2022版 --------------------------------------- [修订日期]:2021年12月 [搜索鸿晟信合研 ...
- 全球及中国益生菌市场应用发展与投资前景调研报告2022版
全球及中国益生菌市场应用发展与投资前景调研报告2022版 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- [修订日期]:2021年11月 [搜索鸿晟信 ...
- 全球及中国生物质能利用产业十四五发展目标及前景容量预测报告2021-2027年
全球及中国生物质能利用产业十四五发展目标及前景容量预测报告2021-2027年 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- [修订日期]:2021 ...
- 中国建筑设计行业投资发展形势及前景规模调查报告2022-2028年版
[出版机构]: 鸿晟信合研究网 第一章 建筑设计行业相关概述 第二章 2019-2021年全球建筑设计行业发展经验借鉴 2.1 国外建筑设计行业发展综述 2.1.1 国外建筑设计机构的组织经营方式 2 ...
- 中国棉纺织工业发展状况及未来竞争格局报告2022-2028年
中国棉纺织工业发展状况及未来竞争格局报告2022-2028年 mmmmmm&mmmmmm鸿**mmm晟&mmm信**mmm合&mmm研**mmmmmmm究&mmm网** ...
- 全球与中国丙烷脱氢制丙烯市场发展形势与前景规划分析报告2022-2028年版
全球与中国丙烷脱氢制丙烯市场发展形势与前景规划分析报告2022-2028年版 [报告目录]: 2021年全球丙烷脱氢制丙烯市场销售额达到了 亿美元,预计2028年将达到 亿美元,年复合增长率( ...
最新文章
- 花5分钟看这篇之前,你才发现你不懂RESTful
- 京瓷1020MFC显示J-05 11是什么意思_Gofair第11讲,细说谷歌系推广的产品优势和推广方式...
- java 交换机_Java交换机案例:有或没有大括号?
- matlab求kcf算法响应图_剖析KCF
- QUIC实战(二) AWS 搭建nginx(http3.0) + upsync + consul(server-client模式) 集群
- centos7 安装MyCli MySQL 客户端
- python 线性回归模型_如何在Python中建立和训练线性和逻辑回归ML模型
- 原 jQuery基础修炼圣典—DOM篇
- linux eth0 proxy arp,在interface vlan下敲no ip proxy-arp什么意思
- 10许可证即将到期_食品经营许可证延续
- 计算机所占比例的函数,(excel求百分比函数公式)excel所占比例怎么算
- 在线模拟装机大学计算机,模拟装机实验.doc
- 特征放缩(Feature scaling)
- 傻瓜式操作更改微信步数
- nuxt 更新部署因浏览器缓存导致页面错误解决方法
- [培训-无线通信基础-10]:正交频分复用(OFDM、符号间多径干扰)
- Python——图片与视频互转(亲测有效)
- 无人机飞控处理器DFU方式刷机方法(STM32单片机)
- docker-compose部署xxl-job-admin 分布式任务调度平台
- 文思海辉笔试题目java_2013文思海辉java笔试题(最新版带答案)
热门文章
- Java视频特效处理(超全)/PC版美颜相机
- itext设置字体间距_微信公众号文章字体怎么修改?行间距、字间距一般设置多少?...
- 【24计算机考研】备考前必须了解的避坑小知识,建议收藏
- Linux内核时间管理和定时器
- 蚂蚁金服java二面_蚂蚁金服Java开发二面
- 关于程序员的996,我们谈谈历史和逻辑
- 关于程序员抵制996的一些想法
- filecmp.dircmp实现递归比对两个目录
- Python脚本提取氨基酸序列的 因子复杂度
- 三角函数π/2转化_高中诱导公式全集,有了它,三角函数公式一网打尽