• Digitalization
    2022-02-10
    这节课瞬间看不懂了,是不是最好先讲接口等其他知识点再讲这个呢?好像这节课跟函数没什么关系呀

    作者回复: 21讲已经覆盖的函数的基本语法,这一讲延展到函数设计之错误处理

    共 3 条评论
    7
  • 五彩斑斓的輝
    2022-05-19
    为什么内置的类型,如int、error等,首字母都是小写的,可以不用遵从首字母大写导出规则,到处都可以使用。是因为它们是在最外层的宇宙代码块里面声明的吗,这在实际上怎么实现的?

    作者回复: "是因为它们是在最外层的宇宙代码块里面声明的吗" - 是的。 这些预定义的类型由编译器特殊处理。

    
    6
  • 郑印
    2021-12-23
    如果函数调用太深,每次做返回值判断都需要写,if err != nil { return err; } 感觉会多出好多的模板代码,有什么好的解决办法吗?

    作者回复: 目前真的没有。

    共 2 条评论
    5
  • Geralt
    2021-12-02
    忽略错误算不算实用的策略呢

    作者回复: 上生产的代码务必不要忽略错误。

    
    5
  • Witt
    2021-12-01
    if err != nil { return err; } 看错误怎么能少得了这个 🐶

    作者回复: 👍。

    共 10 条评论
    4
  • 在下宝龙、
    2021-12-01
    最后一部分的策略四的设计不是很懂 。。。

    作者回复: 问题再具体一些:)

    共 8 条评论
    4
  • 🦉
    2022-01-11
    请问文章这里 var e *MyError if errors.As(err, &e) { // 如果err类型为*MyError,变量e将被设置为对应的错误值 } &e是pointer e的地址吗?如果是的话为什么这样处理呢?谢谢

    作者回复: 对,&e是pointer e的地址。因为var err = &MyError{"MyError error demo"}中,err是一个MyError类型的指针,Error方法是*MyError类型的。 As函数要求,第二个参数应该是实现了error接口的类型的指针。这里*MyError实现了error接口,于是As的第二个参数应该是**MyError类型。 当然这个例子也可以改写一下: package main import ( "errors" "fmt" ) type MyError struct { e string } func (e MyError) Error() string { return e.e } func main() { var err = MyError{"MyError error demo"} err1 := fmt.Errorf("wrap err: %w", err) err2 := fmt.Errorf("wrap err1: %w", err1) var e MyError if errors.As(err2, &e) { println("MyError is on the chain of err2") println(e == err) return } println("MyError is not on the chain of err2") } 这样就不用传**MyError了,传*MyError了。因为新版中MyError也实现了error接口。

    共 2 条评论
    3
  • aoe
    2021-12-02
    多值返回的错误处理很好用。知道了4种错误使用场景,变强了!

    作者回复: 👍

    
    3
  • Unknown element
    2022-10-25 来自北京
    老师我想请教一下错误处理的策略二和策略三的区别是error具体的实现不同吗?哨兵错误处理策略相当于用的还是errorString,而错误值类型检视策略是自定义的struct,可以包含更多上下文?

    作者回复: 从机制上说:策略二是通过值比较进行判定,策略三是通过类型比较进行判定。 从功能上说:“基于 Go 标准库提供的错误值构造方法构造的“哨兵”错误值,除了让错误处理方可以“有的放矢”的进行值比较之外,并没有提供其他有效的错误上下文信息。那如果遇到错误处理方需要错误值提供更多的“错误上下文”的情况,上面这些错误处理策略和错误值构造方式都无法满足。”

    
    2
  • 冯仁彬
    2022-09-13 来自辽宁
    感觉错误处理机制相对于Java没那么好用

    作者回复: 见仁见智:)

    共 3 条评论
    2