Go语言发展状况技术总结.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Go语言发展状况 大纲 • Go语言语法及标准库变化 • Go语言未来发展的判断 • Go语言开源项目 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 Go1.1 • 性能 – 更多内联(inline):append, 接口类型转换 – – – 全新实现 map,更小的内存占用和CPU开销 GC 性能优化 网络库性能优化:减少上下文切换 • 标准库/工具 – 一些尚未稳定的库从标准库移除 • 迁移到 /p/go.exp 或 /p/go.text 中 – 新增的包(package) • go/format • net/http/cookiejar • runtime/race • 详细信息 – /doc/go1.1 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 发布中移出,迁移到 • /p/go.tools/cmd/godoc • /p/go.tools/cmd/vet – 测试覆盖率 • /p/go.tools/cmd/cover • 详细信息 – /doc/go1.2 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 Go1.3 • 实现细节 – cgo 变化:C类型不再允许跨包访问 • 例如,如果某个函数有 *C.FILE 参数,那么这个函数无法在其 他包中使用(会编译失败) – 如果认为此代码是合理的,可将其调整为 unsafe.Pointer • 性能 – 大大降低 defer 的内存开销 – – – 引入并行 GC 算法,大幅度改善 GC 效率 竞争检测算法(race detector) 大幅提速 优化 regexp 包,改善大部分简单正则表达式的性能 • 标准库/工具 – 新增的包(package):debug/plan9obj 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)

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档