9月15日技术沙龙 | 如何将智能化和运维任务相结合,完成智能运维!
去年7月,Go 言语官博就曾泄漏 Go 2 开发方案,并表示 Go 2 的目的就是处置 Go 1.x 在规模化方面做的还不够好的中央。随着时间的推进,开发团队已着手预备 2.0 版本的开发任务,并发布了设计草案,供社区讨论和反应,以促进最终的言语设计。
设计草案包含三个方面,错误处置、错误值和泛型,并针对各个方面停止了详细的概述和改良草案。大致总结如下:
一、错误处置(Error handling)为扩展至大型代码库,Go 顺序必须是轻量级的,不会过度重复,且具有稳健性,可以优雅地处置出现的错误。
目前 Go 反省错误的代码太多,但处置这些错误的代码却严重不足。关于 Go 2,开发团队希望错误反省愈加轻量级,增加用于错误反省的 Go 顺序的文本量。此外,还能愈加方便地编写错误处置顺序,提高开发者处置错误的能够性。
为避免处置重复异常,错误反省和错误处置还必须是显性的,在顺序文本中可见。
参考示例:
func main() { hex, err := ioutil.ReadAll(os.Stdin) if err != nil { log.Fatal(err) } data, err := parseHexdump(string(hex)) if err != nil { log.Fatal(err) } os.Stdout.Write(data) }简化后:
func main() { handle err { log.Fatal(err) } hex := check ioutil.ReadAll(os.Stdin) data := check parseHexdump(string(hex)) os.Stdout.Write(data) } 二、错误值(Error values)大型顺序必须可以以编程方式测试和照应错误,并且还能很好地报告它们。
目前的各种盛行的助手工具包添加了超出标准错误接口的功用,但它们以不兼容的方式执行。关于 Go 2,开发团队思索将“可选接口”标准化,以允许这些工具包停止互操作,并渐渐增加对它们的需求。
改良主要包含两个目的:一是让顺序的错误反省更容易,更不容易出错,以提高顺序的错误处置和稳健性;二是希望可以以标准格式打印包含额外细节的错误。
// Is reports whether err or any of the errors in its chain is equal to target. func Is(err, target error) bool// As checks whether err or any of the errors in its chain is a value of type E.// If so, it returns the discovered value of type E, with ok set to true.// If not, it returns the zero value of type E, with ok set to false. func As(type E)(err error) (e E, ok bool) 三、泛型(Generics)想要扩展到大型代码库,代码的可重用性十分重要。
Go 团队在早期其实不断有在调查和讨论“泛型”的能够性设计,但由于种种缘由,Go 1 更多的是确保能快速构建包含很多独立软件包的顺序。
Go 2 的目的是经过允许带有类型参数的参数多态来处置编写 Go 库的成绩,这些成绩笼统出了不必要的类型细节。
此外,除了预期的容器类型之外,开发团队还希望能编写有用的库来操作恣意的 map 和 channel 值。理想方案是编写可以同时操作 [ ]byte 和 string 值的多态函数。
type List(type T) []T func Keys(type K, V)(m map[K]V) []K【编辑引荐】
老牌言语依然强势,GO、Kotlin 等新言语为何不能破局?
Angular 允许开发者在 Web 和移动运用之间共享代码
如今的顺序员是靠技术要工资吗?网友:不,是面试技术!
用代码构建机器心智,我们离这个目的还有多远?
逃离Google生态很难,但是能让你重获自在
(责任编辑:admin)