当前位置:首页 > 数码 > 中备受争议的失误处置机制-Golang-深化讨论 (中备受争议的成语)

中备受争议的失误处置机制-Golang-深化讨论 (中备受争议的成语)

admin8个月前 (05-09)数码34

一、error是什么?

在C中,前往失误经过errno.h中的失误代码来示意,比如0代表Noerror,也就是没有失误;2代表Nosuchfileordirectory,也就是找不到指定门路的文件或文件夹;5代表Input/Outputerror,示意输入或输入出现了失误...

而在咱们最爱的Golang中,有这样一个饱受争议的error类型,它不是一个整数,而是一个接口。

packagemnimport("errors""fmt")typenamestruct{errorstring}func(n*name)Error()string{returnfmt.Sprintf("%s:...",n.error)}funcmain(){err:=judge(11)//err:=judge(1)//err:=judge(6)fmt.Println(err)}funcjudge(numint)error{ifnum>5&&num<10{returnerrors.New("这个数字大于5了..")}ifnum>=10{returnfmt.Errorf("%d大于或等于10了...",num)}return&name{error:"hello"}}

这是三种可以作为error前往值的方式。errors.New()创立进去的error类型其实是errorString结构体。

//src/errors/errors.go//Newreturnsanerrorthatformatsasthegiventext.//EachcalltoNewreturnsadistincterrorvalueevenifthetextisidentical.funcNew(textstring)error{return&errorString{text}}//errorStringisatrivialimplementationoferror.typeerrorStringstruct{sstring}func(e*errorString)Error()string{returne.s}

所以咱们创立的结构体name其实和errors.New()底层的方式是基本一样的。

而经常使用的fmt.Errorf其实是先将字符串格局化而后再调用errors.New()。

二、error引人争执的点在哪?

在Go中,设计者从言语层面要求人们须要明白地处置遇到的失误,然而因此造成的疑问也十分显著,经常使用Go言语编写的代码中会四处都是,不过低劣的IDE——Goland能够处置这个疑问,经常使用Goland能够将这段判别和处置紧缩,不再搅扰代码的浏览。

我自己是不太青睐的try-catch机制,或许是不太会用,Go言语官网提到try-catch会让代码变得比拟凌乱,很多程序员会胡乱catch意外,造成失误处置比拟简短。

而Go言语经过多前往值机制,让前往失误变得很便捷,并且提供panic和error两种机制,觉得这种机制更有优势,也看起来更繁复。

煎鱼大佬之前有博客谈到了Go社区中对于Go失误处置的新议题,大家想了解的可以看看:

其实之前Go社区中出现过多种对于失误处置的新议题,然而都没有被采用...

三、如何优雅的处置失误

1.防止处置哨兵失误,即Sentinelerrors

比如为了判别err==io.EOF就得引入io包,这是规范库的包还能接受,假设是第三方库的包,并且经常使用哨兵失误,很容易造成循环援用的疑问。

2.防止经常使用error类型

只管这种失误比哨兵失误要好,它可以捕捉更多对于失误的高低文信息,比如出错的行数等其余字段信息。然而又无法防止地在定义失误和经常使用失误的包之间构成依赖相关,又容易造成循环援用的疑问。

3.经常使用不透明的黑盒失误
funcf()error{sentence,err:=say.Hello()iferr!=nil{returnerr}//...}

上方这种写法是不是咱们经常会用到?这种状况下,咱们只须要判别err能否为空,不为空,代表有失误,就间接前往失误,否则就继续口头前面的流程。

作为程序口头者,你没有才干看到程序失误的外部信息,只能知道程序有错或许没有失误。这种失误处置作为一种调试辅佐手腕还是不错的。

4.经常使用Warp和Cause

第三方库.com/pkg/errors可以输入失误堆栈,并且经常使用起来很便捷,大家可以了解一下。

//Wrapannotatescausewithamessage.funcWrap(causeerror,messagestring)error//Causeunwrapsanannotatederror.funcCause(errerror)error

上方来引见Wrap和Cause的经常使用样例:

funcReadFile(pathstring)([]byte,error){f,err:=os.Open(path)iferr!=nil{returnnil,errors.Wrap(err,"openfailed")}deferf.Close()buf,err:=ioutil.ReadAll(f)iferr!=nil{returnnil,errors.Wrap(err,"readfailed")}returnbuf,nil}funcReadConfig()([]byte,error){home:=os.Getenv("HOME")config,err:=ReadFile(filepath.Join(home,".settings.xml"))returnconfig,errors.Wrap(err,"couldnotreadconfig")}funcmain(){_,err:=ReadConfig()iferr!=nil{fmt.Println(err)os.Exit(1)}}

假设ReadConfig()口头失败,就会失掉上方这一行十分好看的报错:

couldnotreadconfig:openfailed:open/Users/dfc/.settings.xml:nosuchfileordirectory

而假设用fmt.Printf和%+v格局来输入就能看到更明晰、更有档次的失误堆栈:

funcmain(){_,err:=ReadConfig()iferr!=nil{fmt.Printf("%+v",err)os.Exit(1)}}
中备受争议的成语

图片

而后咱们再来看Cause的经常使用。

typetemporaryinterface{Temporary()bool}//IsTemporaryreturnstrueiferristemporary.funcIsTemporary(errerror)bool{te,ok:=errors.Cause(err).(temporary)returnok&&te.Temporary()}

当须要审核一个失误与一个特定的值或类型时。比如此处,先用Cause取出失误,做断言,最后调用Temporary(),假设断言失败,ok就会是false,就不会调用左边的Temporary()去口头。

假设&&运算符左侧的子表白式为false,则不会审核右侧的表白式。由于只需有一个子表白式为false,则整个表白式都为false,所以再审核残余的表白式会糜费CPU期间。这被称为短路评价。

本文转载自微信群众号「程序员更新打怪之旅」


《一起来看流星雨》会拍续集么?大概什么时候呢

会的,明年初就会开拍了

《流星雨》拍续集 原班人马继续出演在漫天纷飞的争论中,偶像剧《一起来看流星雨》火了湖南卫视的荧屏,以2.13%的平均收视率一举夺得湖南卫视今年电视剧收视之冠。虽然网上对该剧的口诛笔伐十分猛烈,播出就被观众封为“雷阵雨”,但湖南卫视方面日前决定拍摄续集,已经着手进行准备,制片方正在积极收集观众的意见,续集将完全和《流星花园》撇清关系,争取制作一部更加完美的偶像剧集。

《流星雨》虽然收获骂声不断,但也获得了不小的商业效益。该剧投资4000万元,光靠植入性广告便有近1000万元的收入,加上播出时的广告收入,早已回本。湖南卫视相关负责人透露,很多广告商和客户都追着问何时拍续集。对于争议很大的植入广告,对方表示:“我们确实存在经验不足的问题。”他透露导演和制作方也对于“植入式广告”进行了检讨,因此制作方会在续集中对于“植入式广告”下工夫。

湖南卫视相关负责人还表示,自制剧的资金并不是问题,最大的困难在剧本。《一起来看流星雨》从投拍开始便号称和日本漫画《流星花园》没有关系,不过剧中的H4和楚雨荨的故事在观众眼里还是与之前的版本有着千丝万缕的联系,这也是让这部剧备受争议的原因之一。对于续集的剧本,该负责人表示:“现在还没有确定由谁来写,写什么,但是可以确定的是完全要和《流星花园》撇清关系,内容可能围绕着几位主角毕业、创业的故事。”而演员阵容方面将延用H4和女主角。

来看流星雨2

张翰 饰 慕容云海

郑爽 饰楚雨荨

俞灏明 饰 端木磊

朱梓骁 饰 上官瑞谦

魏晨 饰 叶朔

彭杨 饰 于馨

肖涵 饰 慕容云朵

陈一娜 饰 小渔

任斯璐 饰 徐丽丽

殷叶子 饰 赵美然

宗峰岩 饰 林晓黎 (叶朔的情敌)

黄志玮 饰 叶勉(叶朔的哥哥)

陆虎郭蓉蓉

楚轶男 饰 金娜娜

吴昕 饰 楚悦 (楚雨荨的堂姐)

马剑琪 饰 Candy ( Vincy的孪生妹妹)

苏醒 饰 William (Vincy现任男友)

谢娜 饰 慕容凤(云海堂姐)

张杰 饰 上官鹤 (上官堂兄)

阿穆隆 饰 端木宇凡(端木的表弟)

吉杰 饰 大陆投资的台商(叶烁哥哥生意上的伙伴)

《一起来看流星雨》也让该剧新人演员成功上位,除了俞灏明和魏晨之前已经通过快男聚集了一定的人气外,其他几位新人的名字在短时间内也变得家喻户晓,男主角张翰和女主角郑爽的名字在网络上的搜索率居高不下。昨日记者获悉,续集将延续原班五大主演的阵容,即使是备受争议的俞灏明也不会被换下。“应该还是他们五个演,不会换掉俞灏明。俞灏明在这个戏里的造型确实有一些失误,暴露了他的缺点,在续集中我们会对人物造型进行调整。其实俞灏明演的角色是整部戏里面难度最大的,因为有很多的内心戏要通过表情、眼神来表现,他作为一个新人已经演得很不错了,导演、制片人对他都很满意。”

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Golang

“中备受争议的失误处置机制-Golang-深化讨论 (中备受争议的成语)” 的相关文章

可保养性和优雅感-明晰代码指南-Golang-为您的代码注入可读性

可保养性和优雅感-明晰代码指南-Golang-为您的代码注入可读性

施展易读和易保养软件的好处-第一局部 嗨,开发者们,明晰的代码是指编写易于浏览、了解和保养的软件代码。它是遵照一组准则和通常,优先思考明晰性、繁难性和分歧性的代码。明晰的代码旨在使代码库更易...

中的字符串-Golang-拥抱最佳通常-防止经常出现陷阱 (linux替换文件中的字符串)

中的字符串-Golang-拥抱最佳通常-防止经常出现陷阱 (linux替换文件中的字符串)

在这篇文章中,咱们将讨论Golang中的字符串,并检查一些不同的场景,以防止经常出现失误。让咱们深化讨论! 1.字符串能否可以为nil? 咱们曾经对Golang中的字符串有了基本的了...

使用-Golang-个库-进行自动化的-20 (使用goldwave软件编辑某音频文件)

使用-Golang-个库-进行自动化的-20 (使用goldwave软件编辑某音频文件)

简介 Golang(又名Go)是一种静态类型编译型编程语言,因其在并发编程、废品回收和代码可维护性方面的优势而备受推崇。它凭借卓越的性能、强大的并发支持和简洁的语法,已成为自动化任务的热门选...

优雅组织-Golang-项目结构的指南 (优雅van)

优雅组织-Golang-项目结构的指南 (优雅van)

Go语言社区在系统总结之前,由一些开发者总结了像 cmd 和 internal 这样的目录结构。随后,标准Go项目布局对此进行了进一步的概括,该项目已获得了超过4万个s...

深化探求-中的追加操作-APPEND函数及其外部上班原理来高效地裁减-了解如何经常使用-Golang-Go-容器 (深化要求)

深化探求-中的追加操作-APPEND函数及其外部上班原理来高效地裁减-了解如何经常使用-Golang-Go-容器 (深化要求)

经过实践示例探求Golang中的追加操作 简介 在Golang编程畛域,操作是一种多才多艺的工具,使开发人员能够灵活裁减切片、数组、文件和字符串。在这篇正式的博客文章中,咱们将踏上一段...

Bytes-Golang-包详解之-Bytes.Buffer-中 (byte数据类型)

Bytes-Golang-包详解之-Bytes.Buffer-中 (byte数据类型)

上篇文章具体解说了一次性性明码OTP相关的常识,基于时期的一次性性明码TOTP是OTP的一种成功方式。这种方法的优势是不依赖网络,因此即使在没有网络的状况下,用户也可以生成明码。所以这种方式被许多...

经常使用-Golang-战略和最佳通常高效处置一百万个恳求 (经常使用硅胶倒模能起到锻炼的作用吗)

经常使用-Golang-战略和最佳通常高效处置一百万个恳求 (经常使用硅胶倒模能起到锻炼的作用吗)

有效处置一百万个恳求的战略与最佳通常 在一直开展的Web运行程序畛域,处置大规模恳求的才干是成功的关键要素。作为一名全栈开发人员,您或许相熟Golang的效率和性能。在本文中,咱们将深化讨...