【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

Go 2 将添加错误处理和泛型

  • 2018-09-14
  • 本文字数:1458 字

    阅读完需:约 5 分钟

Gophercon 2018 大会上,Russ Cox 介绍了将添加到Go 2 的特性,包括错误处理和泛型,并透露了当前一些新特性提案的内容。

自去年在Gophercon 2017 大会上宣布以后,Go 2 就旨在克服这门语言的不足,同时,保持“成为开发大型系统的高效语言”的总目标不变。所谓大型系统是指包含许多并发交互服务以及由许多松散协调的工程师开发的大型代码库。

按照Cox 的说法,在所有的Go 开发者调查中,有三个领域的改进一直出现:包管理、错误处理和泛型。

根据InfoQ 之前的报道, Go 1.11 增加了模块,虽然尚处于试验阶段,经常会有修改。模块是共享同一个导入路径前缀的包的集合,提供了一种可以替代GOPATH定位项目依赖的方法。它们也是保证满足递归依赖关系的版本控制单位。

Cox 表示,说到错误处理,Go 当前的不足就明确并可以理解了。一个问题是,Go 的错误处理方式强迫开发人员编写了太多样板代码,就像下面这个惯用模式所展示的那样:

复制代码
<pre data-anchor-id="7fn1">

value, err := DoSomething()
if err != nil {
log.Println(err)
return err
}

复制代码

另外一个相关问题是,当把足够详细的信息传回调用者,包括文件名、行号等,Go 并不会显式创建一个错误处理模型。提供这类详细信息并不难,但增加了样板代码。

为了修复所有这些问题,在 Go 2 中,当前的错误处理草案设计采用了一种新模式,基于:

  • check function(...)表达式,在句法上缩短了错误处理,同时保证其简单易懂;
  • handle语句,定义检查语句失败时应该执行的操作,而且可以更轻松地在单个位置添加准确的错误报告。

check/handle的结合可以有效简化错误处理,如下所示:

复制代码
<pre data-anchor-id="5p9e">

func OldErrorHandlingExample() error {

复制代码
hex, err := ioutil.ReadAll(os.Stdin)
if err != nil {
log.Fatal(err)
return fmt.Errorf("copy %s %s: %v", src, dst, err)
}
data, err := parseHexdump(string(hex))
if err != nil {
log.Fatal(err)
return fmt.Errorf("copy %s %s: %v", src, dst, err)
}
os.Stdout.Write(data)
return nil

}

func NewErrorHandlingExample() error {

复制代码
handle err {
return fmt.Errorf("copy %s %s: %v", src, dst, err)
}
hex := check ioutil.ReadAll(os.Stdin)
data := check parseHexdump(string(hex))
handle err {
// 根据需要执行一些具体的操作
// 例如,如果你打开了一个文件,就关闭它
}
os.Stdout.Write(data)
return nil

}

复制代码

重要的是,要考虑handle代码块链的词法,它们会从最下面往上执行,直到包含return语句的第一个代码块。

Go 社区对于泛型的概念并不陌生,C++、Java 等其他语言都包含这一概念。在一门语言中引入泛型的关键是,它允许如何定义参数类型以及它必须满足的约束,例如相等比较。据 Cox 介绍,把约束规范置于泛型规范之外,即从实现推断,会导致不良接口,在代码开发中特别容易遭到破坏。

在 Go 2 中,当前的泛型草案设计使用contract定义参数类型必须支持而实现时可以使用的操作,例如:

复制代码
<pre data-anchor-id="fpmb">

contract Equal(t T) {
t == T
}

func Uniq(type T Equal)(in <-chan T) <-chan T {

if v != n { … }

}

复制代码

Go 2 当前的草案设计还仅仅是草案。现在,社区是时候参与进来了,帮助改进它们,使它们转化成官方提案。Go 1 的开发不会停止。实际上,根据最初的计划,Go 2 中向后兼容的特性将作为 Go 1 发布的一部分逐步发布,就像 Go 1.11 的模块支持那样,此后,该语言将开始包含任何破坏现有代码库兼容性的特性。

查看英文原文: Go 2 Gets off the Blocks: Feedback Requested on New Package Management, Error Handling, and Generics

2018-09-14 14:572466
用户头像

发布了 1008 篇内容, 共 370.5 次阅读, 收获喜欢 340 次。

关注

评论

发布
暂无评论
发现更多内容

鲲鹏DevKit助力深圳财富趋势高效开发行情分析系统,行情揭示快人一步

说山水

Mac电脑ps ai beta安装教程及ai绘图如何使用

魔仙苹果mac堡

ps AI绘图 ps ai beta Firefly AI使用教程

abaqus有限元仿真常见问题(一):数值仿真在产品研发中的作用

思茂信息

CAE abaqus abaqus软件 abaqus有限元仿真

开源创新 协同融合|2023开放原子全球开源峰会开源协作平台分论坛即将启幕

开放原子开源基金会

开源 开源协作

一文回顾 Boundless Hackathon at Stanford 首期 Workshop

西柚子

鲲鹏DevKit助力南京信息工程大学高效开发

说山水

植物大战僵尸mac版下载

Rose

植物大战僵尸 mac 植物大战僵尸中文版 植物大战僵尸下载 mac塔防游戏

mac电脑如何远程控制win?微软远程桌面连接工具来帮你!

Rose

Mac远程控制软件 mac电脑如何远程控制win microsoft remote desktop 微软远程桌面连接工具

如何在大学校园内合作运营共享电单车

共享电单车厂家

校内共享电单车 共享电动车投放 共享电单车合作 共享电单车厂家

乘云而上,山西软件行业CXO思享会在晋起航

说山水

Scrum敏捷项目管理真实案例

顿顿顿

Scrum 敏捷开发 敏捷开发管理 敏捷项目管理 scrum工具

对应用数据开发还有疑惑?看这篇就够了!数据存储、管理,通通掌握!

HarmonyOS开发者

HarmonyOS

智能出行 驱动未来|2023开放原子全球开源峰会CARSMOS开源智能出行生态年会即将启幕

开放原子开源基金会

开源 智能出行 CARSMOS

一文回顾 Boundless Hackathon at Stanford 首期 Workshop

鳄鱼视界

FC红白机游戏600合集 for mac(小霸王游戏) 单机离线版

Rose

Mac游戏下载 FC 红白机游戏 任天堂游戏下载 小霸王游戏

led显示屏保养技巧

Dylan

故障 LED显示屏 设备日常保养

在软件定义汽车的时代,低代码究竟给车企数字化转型带来了什么?

优秀

低代码 车企 车企数字化

解锁软件工程新角色——平台工程师

SEAL安全

DevOps 平台工程 平台工程师

支持M1的苹果电脑视频下载器-Downie 4 Mac中文版

Rose

Mac 视频下载工具 Downie 4许可证 Downie 4中文版 Downie mac破解版

AI2023下载 Illustrator mac版 2023 年 4 月版(版本 27.5)的新增功能

魔仙苹果mac堡

AI2023下载 Adobe Illustrator2023 AI2023完美解锁版

Java 高效处理千万级数据:技巧与最佳实践

xfgg

Java 大数据

软件测试/测试开发丨接口测试学习笔记

测试人

程序员 软件测试 自动化测试 测试开发

技术的交流 思想的碰撞|2023开放原子全球开源峰会TOC面对面分论坛即将启幕

开放原子开源基金会

开源 社区 TOC

挖掘算力产业的创新力量和新型机遇|2023开放原子全球开源峰会先进计算分论坛即将启幕

开放原子开源基金会

开源 算力 先进计算

百度倾力出品|《神经网络机器翻译技术及产业应用》正式上线

飞桨PaddlePaddle

人工智能 深度学习 百度飞桨

华为教育中心:奇趣“童”行庆六一 多彩儿童应用助成长

科技热闻

提升您的 MQTT 云服务:深入探索 BYOC

EMQ映云科技

物联网 云服务 mqtt

WaveMetrics Igor Pro 9 for Mac(科学计算和数据分析软件)

魔仙苹果mac堡

苹果软件资源站 mac科学计算软件 WaveMetrics Igor Pro 9 Igor Pro 9破解

秒验 iOS端集成指南

MobTech袤博科技

CodeWhisperer 初体验

天黑黑

AI 亚马逊云 CodeWhisperer

世界500强开滦集团的财务共享建设路径

用友BIP

财务共享

Go 2将添加错误处理和泛型_开源_Sergio De Simone_InfoQ精选文章