本文共 1666 字,大约阅读时间需要 5 分钟。
点击上方蓝色“Golang来啦”关注我哟
加个“星标”,天天 15 分钟,一起学 Go
你好哇,欢迎来答题,一起来看下的解析:
1.下面的代码有什么问题,请说明?
func main() { f, err := os.Open("file") defer f.Close() if err != nil { return } b, err := ioutil.ReadAll(f) println(string(b)) }
参考答案及解析:defer 语句应该放在 if() 语句后面,先判断 err,再 defer 关闭文件句柄。
修复代码:
func main() { f, err := os.Open("file") if err != nil { return } defer f.Close() b, err := ioutil.ReadAll(f) println(string(b)) }
2.下面代码输出什么,为什么?
func f() { defer func() { if r := recover(); r != nil { fmt.Printf("recover:%#v", r) } }() panic(1) panic(2) } func main() { f() }
参考答案及解析:recover:1。知识点:panic、recover()。当程序 panic 时就不会往下执行,可以使用 recover() 捕获 panic 的内容。
解析若有不妥之处,欢迎在留言区交流、指正!
看下今天的题目:
1.下面这段代码输出什么?
type S1 struct{} func (s1 S1) f() { fmt.Println("S1.f()") } func (s1 S1) g() { fmt.Println("S1.g()") } type S2 struct { S1 } func (s2 S2) f() { fmt.Println("S2.f()") } type I interface { f() } func printType(i I) { fmt.Printf("%T\n", i) if s1, ok := i.(S1); ok { s1.f() s1.g() } if s2, ok := i.(S2); ok { s2.f() s2.g() } } func main() { printType(S1{}) printType(S2{}) }
2.下面的代码有什么问题?
func main() { var wg sync.WaitGroup wg.Add(1) go func() { fmt.Println("1") wg.Done() wg.Add(1) }() wg.Wait() }
答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!
ps:看完文章如果有收获,顺手花 1s 时间帮点下文末右下方的「在看」,感激!
所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!
推荐阅读:
如果我的文章对你有所帮助,点赞、转发都是一种支持!
给个[在看],是对四哥最大的支持
转载地址:http://azfnb.baihongyu.com/