Go语言题目

发布时间 2023-11-07 15:05:47作者: PEAR2020

1. 为什么有错误?

 必须先处理err再defer file.close()

func main() {
    file, err := os.Open("test.go")
    defer func() {
        err := file.Close()
        if err != nil {
            fmt.Println("close error: ", err)
        } else {
            fmt.Println("close no error")
        }
    }()
    if err != nil {
        fmt.Println("failed", err)
        return
    }
    
}

2. GO是调用C代码模块,静态库和动态库

3.HTTP和DNS属于应用层协议,TCP输出传输层协议,IP和ARP属于网络层协议

4.内置类型是可以定义method,但指针类型是不能被定义的

5. golang中大多数数据类型都可以转化为有效的JSON文本,除了channel、complex、函数等

6. 错误设计 ABCD

A
如果失败原因只有一个,则返回bool
B
如果失败原因超过一个,则返回error
C
如果没有失败原因,则不返回bool或error
D
如果重试几次可以避免失败,则不要立即返回bool或error
7.

  A
switch 中的表达式是可选的,可以省略。如果省略表达式,则相当于 switch true,这种情况下会将每一个 case 的表达式的求值结果与 true 做比较,如果相等,则执行相应的代码。
B
可以在一个 case 中包含多个表达式,每个表达式用逗号分隔。
case "a", "e", "i", "o", "u": //multiple expressions in case
CD
在 Go 中执行完一个 case 之后会立即退出 switch 语句。fallthrough语句用于标明执行完当前 case 语句之后按顺序执行下一个case 语句

8. lock() <-> unlock()

Rlock() <-> Runlock()

9. waitgroup 作为函数参数时必须传入waitgroup的指针