0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Go语言的开发者正着手准备开发2.0版本,程序员有太多话要说

DPVg_AI_era 来源:未知 作者:李倩 2018-08-31 09:04 次阅读

Go 2.0预计公布,在今天HackerNews引发众多讨论,众多Bug即将填补,设计草案抢先预览。

Go语言的开发者正着手准备开发2.0版本,并从以下三个方面发布了初步的设计方案(非官方正式版),以供社区开展讨论:

泛型(generics)

错误处理(error handling)

错误值语义(error value semantics)

Go 2.0的总体目标是解决无法扩展到大型代码库以及无法满足大型项目开发人员需求等问题。

泛型

改进目标

想必大多数用户都对Go语言的泛型会表示无奈,很多网友甚至会说“根本就没有泛型支持”。

Go 2.0的目标是通过允许带有类型参数的参数多态(parametric polymorphism)来解决编写Go库的问题。

除了预期的容器类型之外,还希望能够编写有意义的库来操作任意的map和channel值,并理想地编写能够同时操作[ ]byte和string值的多态函数。

Go的泛型必须明确记录对类型参数的约束,作为调用者和实现之间明确的强制协议。当调用者不满足这些约束或实现超出限制时,编译器需将错误清楚地报告出来。

Go中的多态性应该在编译和运行时都可以实现,这样,有关实现策略的决策就可以留给编译器来决定。这种灵活性将解决Go目前存在的一些难题。

草案设计

设计草案添加了一个新的语法,用于在类型或函数声明中引入类型参数列表,例如:

1typeList(typeT)[]T23funcKeys(typeK,V)(mmap[K]V)[]K4

参数化声明的使用,采用普通调用语法来提供类型参数:

1varintsList(int)23keys:=Keys(int,string)(map[int]string{1:"one",2:"two"})

这些示例中的概括不需要T,K和V类型:任何类型都可以。 通常,实现可能需要约束可以使用的类型。例如,我们可能想要定义一个Set(T),以列表或映射的形式实现,在这种情况下,类型T的值必须能够进行相等的比较。为了表达这一点,设计草案引入了contract的概念。contract就像一个函数体,说明了类型必须支持的操作。例如,要声明类型T的值必须是可比较的:

1contractEqual(tT){2t==t3}

错误处理

改进目标

Go 语言的错误处理是基于明确的目的而设计的。用户应该从函数中返回所有可能的错误,并且检查/处理这些返回值。和其他语言相比,这一点可能看起来有些繁琐和不人性化。

Go 2希望错误检查更加轻量级,减少用于错误检查的Go程序文本的数量。

还希望使编写错误处理变得更方便,从而提高程序员花时间处理错误的可能性。

且错误检查和错误处理必须保持显式,即在程序文本中可见。

草案设计

草案设计引入了两种新的句法形式。

首先,它引入一个检查表达式来检查f(x, y, z)或检查err,并标记一个显式错误检查。

其次,它引入了一个定义错误处理程序的handle语句。当错误检查失败时,它将控制转移到最内层处理程序,该处理程序将控制转移到它上面的下一个处理程序,以此类推,直到处理程序执行返回语句为止。例如:

1funcCopyFile(src,dststring)error{ 2handleerr{ 3returnfmt.Errorf("copy%s%s:%v",src,dst,err) 4} 5 6r:=checkos.Open(src) 7deferr.Close() 8 9w:=checkos.Create(dst)10handleerr{11w.Close()12os.Remove(dst)//(onlyifacheckfails)13}1415checkio.Copy(w,r)16checkw.Close()17returnnil18}

在不返回错误的函数中允许check/handle组合。例如,一下是一个有用却很简单的程序功能:

1funcmain(){ 2hex,err:=ioutil.ReadAll(os.Stdin) 3iferr!=nil{ 4log.Fatal(err) 5} 6 7data,err:=parseHexdump(string(hex)) 8iferr!=nil{ 9log.Fatal(err)10}1112os.Stdout.Write(data)13}

这么写会更简单、清晰:

1funcmain(){2handleerr{3log.Fatal(err)4}56hex:=checkioutil.ReadAll(os.Stdin)7data:=checkparseHexdump(string(hex))8os.Stdout.Write(data)9}

错误值语义

改进目标

也许用户对于Go的程序化的err有许多问题:这是一个RPCError吗?这是net.OpError吗?它适应net.Error的接口吗?这是os.PathError吗?

对于错误值,第一个问题,就是很难回答上述那些疑问。函数os.IsExist,os.IsNotExist,os.IsPermission和os.IsTimeout是主要问题。它们在通用性方面有两个缺陷:每个函数仅测试一种特定类型的错误,第二,每个函数只能理解非常有限数量的包类型。

第二个问题看似没什么,却也很重要:深度嵌套错误(nested error)的报告太难以阅读,并且没有留给额外的细节空间,比如程序中的相关文件位置。

针对上述存在的两个问题,Go 2首先希望能让程序的错误检查更容易,更不容易出错,以提高实际程序的错误处理和鲁棒性。其次,希望能够以标准格式打印带有附加细节的错误。

草案设计

这里有两个主要问题:错误检查和错误格式化,分别用两个不同的方案解决。需要保持与现有代码的互操作性,并允许包继续定义自身的错误类型的约束,指向定义错误实现可以满足的可选界面。

错误检查(Error inspection)

对于错误检查,设计草案遵循现有包(如github.com/pkg/errors)的规则,并为错误定义了一个可选接口,以返回错误包装链中的下一个错误:

1packageerrors23typeWrapperinterface{4Unwrap()error5}

例如,上面假设的WriteError需要:

1func(e*WriteError)Unwrap()error{returne.Err}

利用这种方法,方案设计中添加了两个新函数对错误打包:

1//Isreportswhethererroranyoftheerrorsinitschainisequaltotarget.2funcIs(err,targeterror)bool34//AscheckswhethererroranyoftheerrorsinitschainisavalueoftypeE.5//Ifso,itreturnsthediscoveredvalueoftypeE,withoksettotrue.6//Ifnot,itreturnsthezerovalueoftypeE,withoksettofalse.7funcAs(typeE)(errerror)(eE,okbool)8

错误格式(Error formatting)

对于错误格式,设计草案定义了根据错误来实现的可选接口:

1packageerrors23typeFormatterinterface{4Format(pPrinter)(nexterror)5}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编译器
    +关注

    关注

    1

    文章

    1617

    浏览量

    49021
  • go语言
    +关注

    关注

    1

    文章

    158

    浏览量

    9017

原文标题:Go 2.0发布在即,程序员有太多话要说

文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AI编程工具会不会抢程序员饭碗

    AI编程工具可辅助编程,减少手动编码,提升效率,对程序员积极影响也有挑战。程序员需深化技能、拓宽知识应对。长远看,AI与人类程序员将共生共荣。
    的头像 发表于 11-08 10:17 66次阅读

    第五届长沙·中国1024程序员节开幕

    场精彩活动将轮番上演。超200名海内外技术人员围绕人工智能、数据技术等前沿领域展开深入研讨。 本届1024程序员节中机器人与具身智能、大模型等主题引发热烈讨论;程序员开发者如何利用生成式AI提升
    的头像 发表于 10-25 15:42 142次阅读

    华为原生鸿蒙之夜官宣1024程序员节彩蛋:与鸿蒙开发者共码未来

    历史性突破!会上,华为终端BG CEO何刚向所有鸿蒙开发者致以诚挚的敬意,同时官宣在10月24日程序员节,华为将举办以“共码未来,待到山花烂漫时”为主题的致敬鸿蒙开发者专属活动,希望更多开发者
    的头像 发表于 10-23 15:01 153次阅读
    华为原生鸿蒙之夜官宣1024<b class='flag-5'>程序员</b>节彩蛋:与鸿蒙<b class='flag-5'>开发者</b>共码未来

    阿里云发布首个AI程序员,引领应用开发进入“分钟级”时代

    近日,在备受瞩目的阿里云上海AI峰会上,阿里云向全球开发者们展示了其最新的技术成果——首个“AI程序员”。这款创新应用基于通义大模型构建,具备了令人惊叹的多项技能,包括架构师、开发工程师、测试工程师等,为软件
    的头像 发表于 06-24 10:36 607次阅读

    机智云开发者中心:让移动APP应用开发更智能化

    智能化和高效。   新版本开发者中心的介绍 机智云物联网新版本开发者中心是一款专为开发者设计的一体化开发
    的头像 发表于 03-26 16:45 306次阅读
    机智云<b class='flag-5'>开发者</b>中心:让移动APP应用<b class='flag-5'>开发</b>更智能化

    感觉我国的程序员前景一片灰暗,是这样吗?

    程序员也分为好几等,在现在看来大部分的Android、Java、前端等等开发。已经看不到希望了,很多人都在边缘挣扎;刚看到一位Android开发者,过完年回公司就通知被裁;可见每年都会有很多互联网
    发表于 02-20 20:52

    鸿蒙开发者预览版如何?

    : 高清完整版,可在主页或qr23.cn/AKFP8k保存。 鸿蒙的趋势已经来到,许多Android、Java、前端的程序员也都听到风口。准备进入到鸿蒙的生态建设当中。所以2024是最好布局的时候,趁现在行业还没内卷。更多详细的鸿蒙
    发表于 02-17 21:54

    鸿蒙系统优缺点,能否作为开发者选择

    星河版已经是纯血鸿蒙,但是它的发展一些周期。生态圈的建立难度大,各大厂商加入鸿蒙原生开发需要时间累积。 鸿蒙开发人才空缺,由于鸿蒙作为一款新型的系统,程序员们都是从0学起。所以市面上很少有鸿蒙
    发表于 02-16 21:00

    您有一份OpenHarmony开发者论坛2023年度总结,请查收~

    2023 年 11 月,OpenHarmony 开发者论坛 1.0 版本正式上线。 感谢各位开发者对 OpenHarmony 的大力支持和热爱,成为 OpenHarmony 开发者论坛
    发表于 01-26 17:27

    1月18号“纯鸿蒙”千帆启航,程序员预备!

    。 如何正确看待鸿蒙? 我作为程序员来说,首先是看鸿蒙的发展、市场开发岗位、薪资以及前景。 这几年对鸿蒙的发展情况来分析,从2019年开始鸿蒙的出来今天,华为鸿蒙取得了很大的成就。从“不兼容
    发表于 01-16 22:13

    “GPT 驱动的新程序员时代 ,我们该如何编程”分论坛圆满举办

    的 AI 工具已经将全球的知识库和代码库变得触手可及,只要有足够的创造力和想象力,几乎每个人都能成为“新程序员”。在这一背景下,软件工程领域正在经历一场巨变,那么开发者如何适应这种变化? 12 月 17 日,2023 开放原子开发者
    的头像 发表于 12-25 14:40 404次阅读
    “GPT 驱动的新<b class='flag-5'>程序员</b>时代 ,我们该如何编程”分论坛圆满举办

    开发者说】开发案例:使用canvas实现图表系列之折线图

    】,即可获得投稿渠道。期待你们的分享~ 由于对HarmonyOS的兴趣与开发需求,我已经打卡学习ArkTS语言28天了。在模拟开发历史项目的时候,会经常需要使用到图表这类样式展示,我决定结合之前学习的canvas绘画知识,自己写
    的头像 发表于 12-13 16:05 577次阅读
    【<b class='flag-5'>开发者</b>说】<b class='flag-5'>开发</b>案例:使用canvas实现图表系列之折线图

    诚邀报名 | GPT驱动的新程序员时代,开发者如何编程?

    模式,开发者们迎来了编程范式的全新变革。传统的编程不再局限于编写线性代码和优化逻辑,自然语言取而代之,成为了编程的新工具,这大大降低了开发的门槛。 如今,以ChatGPT、Copilot等为代表的AI工具,将全球的知识库和代码库
    的头像 发表于 12-11 22:20 503次阅读

    TUYA开发者大会(苏州)盛大开幕,涂鸦智能携手全球开发者共建IoT新生态

    精彩纷呈的商业洞见。【TUYA开发者大会(苏州)现场】涂鸦PaaS2.0如何助力开发者打造差异化产品,IoT长连接能力如何拓展户外出行场景,智慧商业IoTsolut
    的头像 发表于 12-08 15:49 827次阅读
    TUYA<b class='flag-5'>开发者</b>大会(苏州)盛大开幕,涂鸦智能携手全球<b class='flag-5'>开发者</b>共建IoT新生态

    程序员表白程序

    电子发烧友网站提供《程序员表白程序.rar》资料免费下载
    发表于 11-21 10:41 16次下载
    <b class='flag-5'>程序员</b>表白<b class='flag-5'>程序</b>