当前位置: 首页 > news >正文

毕业室内设计代做网站广东建设监理协会网站个人账号

毕业室内设计代做网站,广东建设监理协会网站个人账号,中国建设银行官网网址多少,rpg制作大师手机版在上一篇教程中#xff0c;我们了解了 Go 中的错误表示以及如何处理标准库中的错误。我们还学习了如何从错误中提取更多信息。 本教程介绍如何创建我们自己的自定义错误#xff0c;我们可以在函数和包中使用这些错误。我们还将使用标准库所采用的相同技术来提供有关自定义错…在上一篇教程中我们了解了 Go 中的错误表示以及如何处理标准库中的错误。我们还学习了如何从错误中提取更多信息。 本教程介绍如何创建我们自己的自定义错误我们可以在函数和包中使用这些错误。我们还将使用标准库所采用的相同技术来提供有关自定义错误的更多详细信息。 使用 New 函数创建自定义错误 创建自定义错误的最简单方法是使用错误包的New函数。 在我们使用 New函数创建自定义错误之前我们先了解一下它是如何实现的。下面提供了错误包中 New 函数的实现。 package errors// New returns an error that formats as the given text. // Each call to New returns a distinct error value even if the text is identical. func New(text string) error { return errorString{text} }// errorString is a trivial implementation of error. type errorString struct { s string }func (e *errorString) Error() string { return e.s }实现非常简单。errorString是具有单个字符串字段的结构类型。该接口的Error() string 方法error是使用第 1 4行中的errorString 指针接收器实现的。 第 5行中的New函数。 接受一个string参数使用该参数创建一个errorString类型的值并返回它的地址。因此一个新的错误被创建并返回。 现在我们知道该New函数是如何工作的让我们在我们自己的程序中使用它来创建自定义错误。 我们将创建一个简单的程序来计算圆的面积如果半径为负则返回错误。 package mainimport ( errorsfmtmath )func circleArea(radius float64) (float64, error) { if radius 0 {return 0, errors.New(Area calculation failed, radius is less than zero)}return math.Pi * radius * radius, nil }func main() { radius : -20.0area, err : circleArea(radius)if err ! nil {fmt.Println(err)return}fmt.Printf(Area of circle %0.2f, area) }Run in playground 在上面的程序中我们检查半径是否小于零。如果是这样我们将返回nil以及相应的错误消息。如果半径大于 0则计算面积 在 main 函数中我们检查错误是否不等nil。 如果不是nil我们打印错误并返回否则打印圆的面积。 在这个程序中半径小于零因此它将打印 Area calculation failed, radius is less than zero 使用 Errorf 向错误添加更多信息 上面的程序运行良好但如果我们打印导致错误的实际半径岂不是很好。这就是fmt包的Errorf函数派上用场的地方。该函数根据格式说明符格式化错误并返回一个字符串作为接口的值。 让我们使用该Errorf函数并使程序变得更好。 package mainimport ( fmtmath )func circleArea(radius float64) (float64, error) { if radius 0 {return 0, fmt.Errorf(Area calculation failed, radius %0.2f is less than zero, radius)}return math.Pi * radius * radius, nil }func main() { radius : -20.0area, err : circleArea(radius)if err ! nil {fmt.Println(err)return}fmt.Printf(Area of circle %0.2f, area) }Run in playground 在上面的程序中运行该程序将输出 Area calculation failed, radius -20.00 is less than zero 使用结构类型和字段提供有关错误的更多信息 还可以使用将错误接口实现为错误的结构类型。这为我们提供了错误处理的更大灵活性。在我们前面的示例中如果我们想要访问导致错误的半径现在唯一的方法就是解析错误描述Area calculation failed, radius -20.00 is less than zero。这不是执行此操作的正确方法因为如果描述发生更改我们的代码就会中断。 我们将使用上一个教程中“将错误转换为基础类型并从结构体字段检索更多信息”部分中解释的标准库所遵循的策略并使用结构体字段提供对导致错误的半径的访问。我们将创建一个实现错误接口的结构类型并使用其字段来提供有关错误的更多信息。 第一步是创建一个结构类型来表示错误。错误类型的命名约定是名称应以文本结尾Error。所以让我们将结构类型命名为areaError type areaError struct { err stringradius float64 }上面的结构类型有一个字段radius存储导致错误的半径值该err字段存储实际的错误消息。 下一步是实现错误接口。 func (e *areaError) Error() string { return fmt.Sprintf(radius %0.2f: %s, e.radius, e.err) }在上面的代码片段中我们Error() string使用指针接收器实现了错误接口的方法。此方法打印半径和错误描述。 main我们通过编写函数和函数来完成程序circleArea。 package mainimport ( errorsfmtmath )type areaError struct { err stringradius float64 }func (e *areaError) Error() string { return fmt.Sprintf(radius %0.2f: %s, e.radius, e.err) }func circleArea(radius float64) (float64, error) { if radius 0 {return 0, areaError{err: radius is negative,radius: radius,}}return math.Pi * radius * radius, nil }func main() { radius : -20.0area, err : circleArea(radius)if err ! nil {var areaError *areaErrorif errors.As(err, areaError) {fmt.Printf(Area calculation failed, radius %0.2f is less than zero, areaError.radius)return}fmt.Println(err)return}fmt.Printf(Area of rectangle %0.2f, area) }Run in playground 在上面的程序中circleArea用于计算圆的面积。该函数首先检查半径是否小于零如果是则使用导致错误的半径和相应的错误消息创建一个areaError类型值然后返回它的地址以及0。因此我们提供了有关错误的更多信息在本例中是使用自定义错误结构的字段导致错误的半径。 如果半径不为负该函数将计算并返回面积以及nil 我们试图求出半径为 -20 的圆的面积。由于半径小于零因此将返回错误。 我们检查错误是否不等nil我们尝试将其转换为*areaError 类型 。如果错误类型为\*areaError我们将在第 1 行中获取导致错误的半径。使用areaError.radius打印自定义错误消息并从程序返回。 如果错误不是类型*areaError我们只需在第 1 行打印错误并返回。如果没有错误该将打印在数值 该程序将打印 Area calculation failed, radius -20.00 is less than zero 现在让我们使用上一篇教程中描述的第二种策略并使用自定义错误类型的方法来提供有关错误的更多信息。 使用结构类型上的方法提供有关错误的更多信息 在本节中我们将编写一个计算矩形面积的程序。如果长度或宽度小于零该程序将打印错误。 第一步是创建一个结构来表示错误。 type areaError struct { err string //error descriptionlength float64 //length which caused the errorwidth float64 //width which caused the error }上面的错误结构类型包含一个错误描述字段以及导致错误的长度和宽度。 现在我们有了错误类型让我们实现错误接口并在错误类型上添加几个方法以提供有关错误的更多信息。 func (e *areaError) Error() string { return e.err }func (e *areaError) lengthNegative() bool { return e.length 0 }func (e *areaError) widthNegative() bool { return e.width 0 }在上面的代码片段中我们从方法返回错误的描述Error() string。lengthNegative() bool当长度小于零时该方法返回 truewidthNegative() bool当宽度小于零时该方法返回 true。这两种方法提供了有关错误的更多信息在这种情况下它们表示面积计算是否由于长度为负或宽度为负而失败。因此我们使用了结构错误类型的方法来提供有关错误的更多信息。 下一步是编写面积计算函数。 func rectArea(length, width float64) (float64, error) { err : if length 0 {err length is less than zero}if width 0 {if err {err width is less than zero} else {err , width is less than zero}}if err ! {return 0, areaError{err: err,length: length,width: width,}}return length * width, nil }上面的rectArea函数检查长度或宽度是否小于零如果是则返回类型为 *areaError的错误否则返回带有nil错误的矩形面积。 让我们通过创建 main 函数来完成这个程序。 func main() { length, width : -5.0, -9.0area, err : rectArea(length, width)if err ! nil {var areaError *areaErrorif errors.As(err, areaError) {if areaError.lengthNegative() {fmt.Printf(error: length %0.2f is less than zero\n, areaError.length)}if areaError.widthNegative() {fmt.Printf(error: width %0.2f is less than zero\n, areaError.width)}return}fmt.Println(err)return}fmt.Println(area of rect, area) }在 main 函数中我们检查错误是否不等nil如果它不为nil我们尝试将其转换为*areaError类型。然后使用lengthNegative()和widthNegative()方法检查错误是否是由于长度为负或宽度为负而导致的。我们打印相应的错误消息并从程序返回。因此我们使用错误结构类型上的方法来提供有关错误的更多信息。 如果没有错误将打印矩形的面积。 这是完整的程序供您参考。 package mainimport ( errorsfmt )type areaError struct { err string //error descriptionlength float64 //length which caused the errorwidth float64 //width which caused the error }func (e *areaError) Error() string { return e.err }func (e *areaError) lengthNegative() bool { return e.length 0 }func (e *areaError) widthNegative() bool { return e.width 0 }func rectArea(length, width float64) (float64, error) { err : if length 0 {err length is less than zero}if width 0 {if err {err width is less than zero} else {err , width is less than zero}}if err ! {return 0, areaError{err: err,length: length,width: width,}}return length * width, nil }func main() { length, width : -5.0, -9.0area, err : rectArea(length, width)if err ! nil {var areaError *areaErrorif errors.As(err, areaError) {if areaError.lengthNegative() {fmt.Printf(error: length %0.2f is less than zero\n, areaError.length)}if areaError.widthNegative() {fmt.Printf(error: width %0.2f is less than zero\n, areaError.width)}return}fmt.Println(err)return}fmt.Println(area of rect, area) }Run in playground 该程序将打印输出 error: length -5.00 is less than zero error: width -9.00 is less than zero 我们已经看到了错误处理教程中描述的三种方法中的两种的示例以提供有关错误的更多信息。 使用直接比较的第三种方法非常简单。我将把它作为一个练习让您了解如何使用此策略来提供有关我们的自定义错误的更多信息。 祝你有美好的一天。
http://www.w-s-a.com/news/184541/

相关文章:

  • 百度推广点击收费标准自己如何做网站优化
  • 安徽省建设监理网站广州澄网站建设公司
  • 做简历用什么网站俄罗斯搜索引擎浏览器官网入口
  • dw里响应式网站怎么做制作网站需要多少时间
  • 网站如何做双链路示范学校建设专题网站
  • 网站开发北京影视网站seo描述
  • 高端网站定制建设公司哪家好企业网络推广技巧
  • 建设公司网站的内容建筑设计图片
  • 用ps怎么做网站的效果图互联网营销师报名入口官网
  • 网站的后端怎么开发网站 白名单
  • 济宁中小企业网站建设wordpress爆破工具
  • 零基础网站建设视频商城系统平台有哪些
  • 那个网站做百科好过wordpress删除
  • 优化网站排名怎么制作网站建设数据库模板
  • 哪个建站软件比较好带论坛都有什么公司需要网站建设
  • 同城便民网站开发自己免费怎么制作网站吗
  • 数据库网站开发教程网站内部优化是什么意思
  • 哈尔滨建站怎么做广西seo快速排名
  • 公司网站建设的不足企业文档管理wordpress
  • .net做的网站代码网站怎么加二级域名
  • 网站建设方案对比分析报告成都短视频代运营
  • 企业所得税税率知多少重庆seo什么意思
  • ftp如何修改网站备案号百度云建站
  • 免费做网站空间dede二手车网站源码
  • 网站服务器需要多大设计网站公司开发
  • asp 网站权限设计做网站业务员
  • 做棋牌网站违法嘛网络服务网络推广
  • 专门做推广的网站吗免费建域名网站
  • 在百度做网站株洲网站平台搭建
  • 用node做的网站南宁网站定制开发