企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
## 函数返回错误 一般将函数最后一个返回值返回一个error接口类型的错误,如果该error不为nil,那么应该是发生了错误,对于该函数返回的其他值,不应该再使用了(大多数情况). ## 错误处理策略 1 . 将错误直接返回给调用者. 或者当if判断有错误时,构造新的错误解释返回.对于一个函数有多个可能发生错误的地方,返回清晰的错误原因. 2.重试错误,当第一次调用时发生了错误,那么我们尝试再次调用,但是要设置调用的次数和事件间隔,不能无限制的去调用. 3.如果错误发生后,程序无法继续运行,我们就可以采用第三种策略:输出错误信息并结束程序。需要注意的是,这种策略只应在main中执行。对库函数而言,应仅向上传播错误,除非该错误意味着程序内部包含不一致性,即遇到了bug,才能在库函数中结束程序。os.Exis(1) 4.有时,我们只需要输出错误信息就足够了,不需要中断程序的运行。我们可以通过log包提供函数 ~~~ if err := Ping(); err != nil { log.Printf("ping failed: %v; networking disabled",err) } ~~~ 5.我们可以直接忽略掉错误。这种错误,不会造成很大的影响.并不影响程序的正常使用.但是你要清除,忽略意味着什么. ~~~ dir, err := ioutil.TempDir("", "scratch") if err != nil { return fmt.Errorf("failed to create temp dir: %v",err) } // ...use temp dir… os.RemoveAll(dir) // ignore errors; $TMPDIR is cleaned periodically ~~~ 在Go中,错误处理有一套独特的编码风格。检查某个子函数是否失败后,我们通常将处理失败的逻辑代码放在处理成功的代码之前。如果某个错误会导致函数返回,那么成功时的逻辑代码不应放在else语句块中,而应直接放在函数体中。Go中大部分函数的代码结构几乎相同,首先是一系列的初始检查,防止错误发生,之后是函数的实际逻辑。