源地址 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(-))
}

运行结果

最新文章

  1. FreeCAD鼠标操作指南
  2. c++继承,多态,重载的作用
  3. 添加了有道生词本的 chrome google翻译扩展和有道翻译扩展
  4. win10 google浏览器设置
  5. 对HTML+CSS+JavaScript的个人理解
  6. Linux下smokeping网络监控环境部署记录
  7. memcached学习笔记6--浅谈memcached的机制 以及 memcached细节讨论
  8. c# 中的多线程和异步
  9. 通过FTP自动上传当天的备份数据
  10. 转:Java程序员最常用的8个Java日志框架
  11. WPF之Binding深入探讨--Darren
  12. ubuntu16.10下安装erlang和RabbitMQ
  13. 为开源社区尽一份力,翻译RocketMQ官方文档
  14. 【已解决】通过Package或者Package+Activity启动应用
  15. GIS中的坐标系【Esri官方文档部分翻译】
  16. select下拉列表js操作兼容性问题分享
  17. Linux网卡聚合时,其中一个网卡有两种配置的解决方法
  18. 页面跳转、底部tabs切换页面
  19. AngularJs 开发遇到的问题,以及解决方案
  20. hdu2255 奔小康赚大钱 二分图最佳匹配--KM算法

热门文章

  1. Python3基础之异常结构
  2. 安卓开发-Activity中finish() onDestroy() 和System.exit()的区别(转)
  3. ParallaxNode视差节点实现远景近景的不同层次移动
  4. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) C. Bear and Different Names 贪心
  5. __Linux__文件和目录
  6. class-dump 使用
  7. goto语句引起的crosses initialization of XXX
  8. jquery所有版本下载外链地址
  9. python 常见问题
  10. windows多线程同步--临界区