写点什么

Golang interface and error handle

用户头像
escray
关注
发布于: 2021 年 04 月 18 日
Golang interface and error handle

极客时间《Go 语言从入门到实践》学习笔记 05

16 | Go 语言的相关接口


Go 接口的实现,不依赖与接口的定义,那么还要接口做什么?


先写代码,再写接口。这个有点狠。


对于自定义类型,一方面可以简化代码,是不是有 C++ 的影子(宏定义)?另一方面感觉更像语法糖。

好几条留言都和 Java 有关,看来 Java 还是人多。


@iMARS 的代码可以帮助理解

17 | 扩展与复用


先看了留言,感觉大家对老师的怨念颇深,不过我觉的还好,打算听完这个课程,然后再到隔壁的《Go 语言核心 36 讲》去看看。


我觉得极客时间的课程整体质量还不错,如果有其他平台好的课程,或者好书(文档),不妨也推荐一下。

我是一边看视频一遍敲代码,不明白的地方看代码一般就能理解,或者看一下留言里面其他同学的代码。


18 | 不一样的接口类型,一样的多态


空接口类似于 C++ 里面的 void * 可以穿任何类型进去,类似于 Java 中的 object,如果真的使用的时候,需要进行类型转换


在 Go 里面可以使用断言 p.(type) 来判断类型,但是确实和留言里面说的一样,只能用于 switch 中,算是一种约定么?


最近的着三节,连起来看,Go 不支持继承,接口的实现和 Java 之类的语言也有很大的区别,但是可以实现多态。


不明觉厉,虽然不知道这些特性有什么优势,但是从 Google 的背书和大佬们的支持,应该还是有潜力的。

19 | 编写好的错误处理


我之前感觉 C# 和 Java 的 try-catch 挺好用的,逻辑上也很通顺。


对于 Go 的这种错误处理方式,虽然不太习惯,但是因为大佬背书,所以我觉的老师讲的 Go 错误处理的机制也都是可以接受的,多写几次就适应了。


“及早失败,避免嵌套”这个原则应该是没有问题的,以前在调试的时候,不知道要倒推多少层嵌套,容易迷路。


希望后面能看到比较典型业务代码中的错误处理机制。


留言里面,@Aprelude 和 @曾立涵 的问答很有帮助。


20 | panic 和 recover


恢复机制常常被错误使用,只是简单的打印的错误信息,或者是吞噬了异常。


在 Go 语言里面,一般说是错误处理,而不是异常处理。


我的 os.Exit(-1) 也没有输出错误代码 255,echo $? 的结果是:0


macOS Big Sur 11.2.3


func TestPanicVsExit(t *testing.T) {  defer func() {    fmt.Println("Finally")  }()  defer func() {    if err := recover(); err != nil {      fmt.Println("recovered from ", err)    }  }()  fmt.Println("Start")  panic(errors.New("something wrong!"))  // os.Exit(-1)  // fmt.Println("End")}
复制代码


发布于: 2021 年 04 月 18 日阅读数: 20
用户头像

escray

关注

Let's Go 2017.11.19 加入

Let's Go,用 100 天的时间从入门到入职

评论

发布
暂无评论
Golang interface and error handle