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)。。有点复杂哦,先不想了。