1.
package main import ( "fmt" ) func main() { defer_call() } func defer_call() { defer func() { fmt.Println("打印前") }() defer func() { fmt.Println("打印中") }() defer func() { fmt.Println("打印后") }() panic("触发异常") } 打印后 打印中 打印前
因为defer语句用于延迟函数的调用,每次defer都会把一个函数压入栈中,函数返回前再把延迟的函数取出并执行。
2.
2、写出下面代码输出内容 type student struct { Name string Age int } func pase_student() { stus := []student{ {Name: "zhou", Age: 24}, {Name: "li", Age: 23}, {Name: "wang", Age: 22}, } for _, stu := range stus { stu.Age = 100 } fmt.Println(stus) } 结果不会变化
range 遍历,得到的是copy值,不会修改原始值
3.
3、写出下面代码输出内容 func main() { s := make([]int, 5) s = append(s, 1, 2, 3) fmt.Println(s) } [0,0,0,0,0,1,2,3]
4.JSON 标准库对 nil slice 和 空 slice 的处理是一致的吗?
一致的
nil 切片被用在很多标准库和内置函数中,描述一个不存在的切片的时候,就需要用到 nil 切片。比如函数在发生异常的时候,返回的切片就是 nil 切片。nil 切片的指针指向 nil。
空切片一般会用来表示一个空的集合。比如数据库查询,一条结果也没有查到,那么就可以返回一个空切片。
空切片和 nil 切片的区别在于,空切片指向的地址不是nil,指向的是一个内存地址,但是它没有分配任何内存空间,即底层元素包含0个元素。
5、无缓冲 Chan 的发送和接收是否同步?
是的
无缓冲Chan就是Chan空间为0,发送与接送需要同时执行,不然会堵塞
有缓冲就是有空间的Chan,只有空间满了才堵塞,发送与接受可以不同步
6.
图中的解有点问题
(1)
select name from b group by name having sum(case when score>80 then 1 else 0 end)>=3;
参考:https://blog.csdn.net/varyall/article/details/78908023
(2)。。有点复杂哦,先不想了。