- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Go语言发展状况
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)
您可能关注的文档
最近下载
- 绿化养护标准图片手册(2015A).pdf VIP
- 《内科输血指南》课件.ppt VIP
- CECS 138-2002给水排水工程钢筋混凝土水池结构设计规程.pdf VIP
- 人教版八年级上册数学期末考试试卷含答案.pdf VIP
- 电子信息工程专业《毕业设计(论文)》教学大纲.pdf VIP
- 压力管道安装材料标识移植记录(示例)参考.docx
- 淮阴工学院2023-2024学年《高等数学(上)》期末考试试卷(A卷)含参考答案.pdf
- 二、DVP结算业务知识及注意事项.pdf VIP
- 高血压危象护理PPT课件.pptx VIP
- 山东省临沂市2024-2025学年高一上学期1月期末考试物理试题(解析版).docx VIP
原创力文档


文档评论(0)