
获得徽章 27
- #每天一个知识点# 一个小知识,defer 使用
- defer 的原理是先入后出,defer 后面跟自定义函数,如果有返回值,defer 会默认忽略掉
- defer 后面也可以跟内置函数,但是需要注意,仅限这几个:close、copy、delete、print、recover
- defer 后面跟的自定义函数,如果要计算值,需要注意传值问题,若传值是 defer aaa(i int){}(i),则传入什么就会使用什么值,因此此处如果是传入的值是一个地址,那么和传入的是一个值又是不一样的效果,若是 defer aaa(){fmt.Println(i)}() ,则 i 会根据defer 的外部函数结束之后, i 最终是多少才会使用多少
- defer 使用可以修改外部函数的返回值,可以拦截 panic ,可以输出调试信息等等
- Go编译器给出了一组错误提示!从中我们看到,append、cap、len、make、new等内置函数是不可以直接作为deferred函数的,而close、copy、delete、print、recover等可以。展开评论1 - #与A-SOUL一起成为更好的自己# 搬家后第一次昨做饭,下水道就堵了,一脸蒙圈。自己买工具通下水道发现不行,找专业的师傅来才发现原来是下水道长期有凝固的油堵住了,已经和管子死死凝固在一起了,需要融油的液体才能用工具搅开。
又消耗250大洋
85 - #每天一个知识点# 一个小知识,GO语言控制语句注意别踩坑
if 默认使用快乐路径,遇到错误就 return,不要写太多的 if{} else{}
for...range 注意 使用的都是副本
其中range 后面如果传的是切片例如 a[:] ,这样默认是一个指针副本,指向的还是真实的底层数组,如果传的是 a ,那么传的就是一个数组副本 a
for...range 对于切片或者数组进行遍历时,在遍历过程中 append 元素 或者 修改某个元素的值,是不会影响到原有 切片或者是数组的,引入 range 后面的数据是传入的一个副本
for...range 在 map 的情况, 顺序是不定的,如果在 循环中给 map 添加新的元素,这个元素可能会被遍历到,可能不会
break 和 continue 可以带上 label,如果不带 label ,则例如 break 是退出和自己最近的一个循环
在 GO 中, case 后面可以带上多个分支,可以使用 case 来替代 fallthrough
展开评论1