Go指南练习_错误
2024-09-18 01:08:19
源地址 https://tour.go-zh.org/methods/20
一、题目描述
从之前的练习中复制 Sqrt
函数,修改它使其返回 error
值。
Sqrt
接受到一个负数时,应当返回一个非 nil 的错误值。复数同样也不被支持。
创建一个新的类型
type ErrNegativeSqrt float64
并为其实现
func (e ErrNegativeSqrt) Error() string
方法使其拥有 error
值,通过 ErrNegativeSqrt(-2).Error()
调用该方法应返回 "cannot Sqrt negative number: -2"
。
*注意:* 在 Error
方法内调用 fmt.Sprint(e)
会让程序陷入死循环。可以通过先转换 e
来避免这个问题:fmt.Sprint(float64(e))
。这是为什么呢?
修改 Sqrt
函数,使其接受一个负数时,返回 ErrNegativeSqrt
值。
二、分析
- 定义float64的类型ErrNegativeSqrt;
- 重写Error方法。
三、Go代码
package main import (
"fmt"
"math"
) type ErrNegativeSqrt float64 //创建一个新的类型 func (e ErrNegativeSqrt) Error() string {
return fmt.Sprintf("cannot Sqrt negative number: %v", float64(e))
} func Sqrt(x float64) (float64, error) {
if x < {
return , ErrNegativeSqrt(x)
}
return math.Sqrt(x), nil
} func main() {
fmt.Println(Sqrt())
fmt.Println(Sqrt(-))
}
运行结果
最新文章
- FreeCAD鼠标操作指南
- c++继承,多态,重载的作用
- 添加了有道生词本的 chrome google翻译扩展和有道翻译扩展
- win10 google浏览器设置
- 对HTML+CSS+JavaScript的个人理解
- Linux下smokeping网络监控环境部署记录
- memcached学习笔记6--浅谈memcached的机制 以及 memcached细节讨论
- c# 中的多线程和异步
- 通过FTP自动上传当天的备份数据
- 转:Java程序员最常用的8个Java日志框架
- WPF之Binding深入探讨--Darren
- ubuntu16.10下安装erlang和RabbitMQ
- 为开源社区尽一份力,翻译RocketMQ官方文档
- 【已解决】通过Package或者Package+Activity启动应用
- GIS中的坐标系【Esri官方文档部分翻译】
- select下拉列表js操作兼容性问题分享
- Linux网卡聚合时,其中一个网卡有两种配置的解决方法
- 页面跳转、底部tabs切换页面
- AngularJs 开发遇到的问题,以及解决方案
- hdu2255 奔小康赚大钱 二分图最佳匹配--KM算法
热门文章
- Python3基础之异常结构
- 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别(转)
- ParallaxNode视差节点实现远景近景的不同层次移动
- Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) C. Bear and Different Names 贪心
- __Linux__文件和目录
- class-dump 使用
- goto语句引起的crosses initialization of XXX
- jquery所有版本下载外链地址
- python 常见问题
- windows多线程同步--临界区