Go语言发展状况和前景

article/2025/6/8 11:39:17

    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


http://chatgpt.dhexx.cn/article/svVdHyEb.shtml

相关文章

探索Go语言在机器学习领域的应用局限与前景

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

什么是Go语言?有前途么?

同类问题:什么是天命? 回答:潇洒走一回,才能告诉你。 根据编程语言学习的经验,我发现,这个问题,只有等到学习完一门语言,然后做过一个项目,熟练的Debug之后,…

golang的优劣与前景分析

在一月底,我获得字节后端实习的offer之后,由于临近过年,没有立刻入职。寒假闲在家中无聊,开始了对golang的学习。 但是这也引发了我的一个思考:入职字节后,大概率要抛弃之前学习已久的java技术栈&#xff…

Go语言的前景分析

本文为原创文章,转载注明出处,asdfasdfasdf 欢迎扫码关注公众号 flysnow_org或者网站 http://www.flysnow.org/,第一时间看后续精彩文章。觉得好的话,顺手分享到朋友圈吧,感谢支持。 这段时间比较忙,相信很…

go入门介绍以及发展前景

第001节:知名编程语言或系统的发展简史 Go语言现在的前景怎么样? 最受欢迎的语言 Go,也称为Golang,是谷歌设计的一种编程语言。它为多线程提供了出色的支持,因此经常被严重依赖分布式系统的公司以及硅谷的初创公司使…

主成分分析PCA案例

主成分分析 引言主成分分析(PCA)是一种能够极大提升无监督特征学习速度的数据降维算法。更重要的是,理解PCA算法,对实现白化算法有很大的帮助,很多算法都先用白化算法作预处理步骤。假设你使用图像来训练算法&#xff…

主成分分析——SPSS实例分析

主成分分析是用原始变量的线性组合来表示主成分,且主成分彼此之间互不相关,且能反映出原始数据的绝大部分信息。 一般来说,当研究的问题涉及到多变量且变量之间存在很强的相关性时,我们可考虑使用主成分分析的方法来对数据进行简化…

用通俗易懂的方式讲解:主成分分析(PCA)算法及案例(Python 代码)

文章目录 知识汇总加入方式一、引入问题二、数据降维三、PCA基本数学原理3.1 内积与投影3.2 基3.3 基变换的矩阵表示3.4 协方差矩阵及优化目标3.5 方差3.6 协方差3.7 协方差矩阵3.8 协方差矩阵对角化3.9 对上面例子整合 四、主成分分析(PCA)算法步骤五、…

主成分分析及案例

主成分分析思想 核心思路 总体主成分推导 基于标准化变量的总体主成分分析 主成分分析(PCA)就是在所有可能的Y1,...,Yn的线性组合模式中,寻找一个或几个(通常小于n个)可以最大程度区分变量的线性组合/加权平均。即…

主成分分析实例

目录 实例描述步骤确定主成分计算得分解读结果 实例描述 某面馆有各种种类的汤面,为了得知受欢迎程度,进行了在【面】、【汤】、【配料】3个维度的打分。现利用主成分分析法对数据挖掘。 步骤 确定主成分 加载包 import numpy as np import pandas …

因子分析模型(主成分解)、及与主成分分析模型的联系与区别(附详细案例)

* * * * * * * * 因子分析是主成分分析的推广和发展,它也是多元统计分析中将为的一种方法. 因子分析是研究相关阵和或协方差阵的内部依赖关系,它将多个变量综合为少数几个因子,以再现原始变量与因子之间的相关关系. 因子分析的思想一般…

PCA主成分分析实战案例

遇到的问题: X df.loc[:,0:4].values#提取第0-3列 y df.loc[:,4].values #提取第4列报错: TypeError: cannot do slice indexing on Index with these indexers [0] of type int修改代码为: X df.iloc[:,0:4].values#提取第0-3列 y df…

主成分分析法概述、案例实例分析

http://hi.baidu.com/weizican/blog/item/9e816926f2977521d5074257.html 主成分分析法 主成分分析也称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。在实证问题研究中,为了全面、系统地分析问题,我们必须考虑…

清风数学建模学习笔记——主成分分析(PCA)原理详解及案例分析

主成分分析 本文将介绍主成分分析(PCA),主成分分析是一种降维算法,它能将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能反映出原始数据的大部分信息。 一般来说,当…

多元统计及R语言案例分析 (主成分和因子分析对学生成绩神秘联系分析)

嗨喽! 大家好,我是“流水不争先,争得滔滔不绝”的翀,18双非本科生一枚,正在努力!欢迎大家来交流学习,一起学习数据分析,希望我们一起好好学习,天天向上,目前是小社畜一枚…

超详细SPSS主成分分析计算指标权重(一)

一、指标权重计算确定的困惑 相信很多写过或者正在写指标处理类论文的朋友都曾对如何计算指标权重充满困惑,到底是用熵值法,还是主成分分析法?或者其他各种看起来奥妙无穷却难以上手操作的神奇方法?好不容易确定要选用主成分分析…

一文读懂 主成分分析 与 因子分析

2023-2-20更新:  修改了一些文字错误,优化了排版,增加了一些拓展内容,祝大家学业有成!(期待三连😁😁) 目录 一、 主成分分析二、因子分析三、多元共线性问题简介3.1 多…

主成分之综合竞争力案例分析

一、案例背景 1.案例说明 研究调查100家公司2010-2013年关于财务方面的具体数据,这些财务指标维度分别为盈利能力、偿债能力、运营能力、发展能力以及公司治理。其中每个维度分别有几个分析项,但是有些指标是越大越好,有些指标是越小越好。…

数据分析,主成分分析例题

已知协方差矩阵求X的各主成分以及主成分的贡献率 主成分分析 原理:找出几个综合变量来代替原来众多的变量,使这些综合变量能尽可能地代表原来变量的信息量,且彼此之间互不相关 统计方法:主成分分析(主分量分析&…