正确处理方法:

一、失败的原因只有一个时,不使用error

例如:

func (self *AgentContext) CheckHostType(host_type string) error {    switch host_type {    case "virtual_machine":                        return nil    case "bare_metal":                return nil    }    return errors.New("CheckHostType ERROR:" + host_type)}

我们可以看出,该函数失败的原因只有一个,所以返回值的类型应该为bool,而不是error,重构一下代码:

func (self *AgentContext) IsValidHostType(hostType string) bool {    return hostType == "virtual_machine" || hostType == "bare_metal"}

说明:大多数情况,导致失败的原因不止一种,尤其是对I/O操作而言,用户需要了解更多的错误信息,这时的返回值类型不再是简单的bool,而是error。

二、没有失败时,不使用error

error在Golang中是如此的流行,以至于很多人设计函数时不管三七二十一都使用error,即使没有一个失败原因。

我们看一下示例代码:

func (self *CniParam) setTenantId() error {    self.TenantId = self.PodNs        return nil}

对于上面的函数设计,就会有下面的调用代码:

err := self.setTenantId()if err != nil {    // log    // free resource    return errors.New(...)}

根据我们的正确姿势,重构一下代码:

func (self *CniParam) setTenantId() {    self.TenantId = self.PodNs}

于是调用代码变为:

self.setTenantId()

三、error应放在返回值类型列表的最后

对于返回值类型error,用来传递错误信息,在Golang中通常放在最后一个。

resp, err := http.Get(url)if err != nil {        return nill, err}

bool作为返回值类型时也一样。

value, ok := cache.Lookup(key) if !ok {    // ...cache[key] does not exist… }

四、错误逐层传递时,层层都加日志

层层都加日志非常方便故障定位。

相关文章教程推荐:golang教程

更多相关文章

  1. golang如何判断数据类型
  2. golang数据类型有哪些
  3. golang代码能不能加密
  4. golang 如何类型转换
  5. go语言数据类型转换教程
  6. golang 怎么调用c代码
  7. golang怎么把字符串转成Int类型
  8. golang判断错误类型的方法
  9. 详解 Go 中的不可变类型

随机推荐

  1. 【C语言】递归和非递归分别实现strlen
  2. C++中动态内存分配与命名空间介绍
  3. C++中如何避免内存泄漏?
  4. 【C++趣味程序】之开心消消乐
  5. C中scanf()和gets()之间的区别(代码示例)
  6. C中如何声明指向函数的指针?
  7. C++实现在二维数组中的查找
  8. C#中的Console.Read()方法详解
  9. C/C++函数如何返回多个值?(代码示例)
  10. C ++中Accessor函数的特征