golang 模拟试卷
GO函数专题测试
1. 函数定义与声明
- 函数关键字:func关键字定义函数
- 基本语法:参数列表、返回类型、函数体
- 函数命名:驼峰命名、首字母大小写决定可见性
- main函数:程序入口、必须在main包、无参数无返回值
- init函数:自动执行、可多个、先于main执行
2. 函数参数与返回值
- 参数传递:值传递、参数副本
- 多返回值:Go特色、返回多个值
- 命名返回值:命名返回参数、简化return
- 可变参数:
...type语法、函数内是切片 - 可变参数调用:直接传值或展开切片
slice...
3. 匿名函数与闭包
- 匿名函数:无名称函数、func(){}语法
- 立即执行:
func(){...}()括号紧跟 - 闭包定义:函数引用外部变量
- 闭包特性:外部变量生命周期延长
- 闭包陷阱:循环中的闭包问题
4. 延迟执行defer
- defer语法:延迟到函数返回前执行
- 执行顺序:多个defer按LIFO顺序(后进先出)
- defer应用:资源释放、解锁、错误处理
- defer参数:参数在defer时已确定
- defer与返回值:defer可修改命名返回值
5. 错误处理与panic/recover
- error接口:Error() string方法
- panic触发:panic()函数、程序崩溃
- recover捕获:必须在defer中调用
- recover返回:返回panic的值
- 应用场景:HTTP服务器防止崩溃
6. 函数类型与高阶函数
- 函数类型:
type Name func(params) returns - 函数作为值:赋值给变量
- 函数作为参数:传递给其他函数
- 函数作为返回值:返回函数
- 一等公民:函数像普通值一样使用
7. init函数与执行顺序
- init作用:包初始化
- init特点:自动执行、无参数无返回值
- 执行顺序:依赖包init → 当前包变量 → 当前包init → main
- init数量:一个文件可有多个init函数
8. 函数最佳实践
- 函数命名:清晰描述功能
- 函数长度:保持简洁、单一职责
- 参数数量:不超过5个参数
- 错误处理:返回error而非panic
- defer使用:资源释放放在defer中
试卷习题(20 题)
参考答案在文末判断题
1
判断题
Go的闭包可以捕获并修改外部函数的局部变量。
2
判断题
Go语言不支持函数重载(同名函数不同参数)。
3
判断题
recover函数只能在defer函数中调用才能捕获panic。
4
判断题
当多个连续参数类型相同时,可以省略前面的类型声明,只保留最后一个的类型。
5
判断题
defer语句中的参数在定义时就已计算,而非在执行时计算。
6
判断题
Go语言推崇使用error返回值处理错误,而非异常机制。
7
判断题
在for循环中启动goroutine时,如果闭包捕获循环变量,所有goroutine可能看到相同的最终值。
单选题
8
单选题
Go中定义匿名函数的方式是?
9
单选题
Go中函数可以赋值给变量,这种特性称为?
10
单选题
Go中defer语句的执行时机是?
11
单选题
Go中定义可变参数函数使用什么语法?
12
单选题
Go语言函数最多可以返回多少个值?
13
单选题
Go语言中定义函数使用哪个关键字?
多选题
14
多选题
关于defer与命名返回值的配合使用,以下说法正确的是?
15
多选题
Go中闭包的常见用途包括?
填空题
16
填空题
Go中可以定义 ,语法为 。函数类型可以 给变量、作为 参数 传递、作为 返回值。这体现了Go中函数是 一等公民 的特性。
17
填空题
Go中 函数用于触发异常, 函数用于捕获异常。recover必须在 函数中调用才有效,否则返回 nil。panic触发后会执行当前函数的所有 defer 语句,然后向上传播。
18
填空题
Go程序的入口函数是 函数,它必须在 包中定义。main函数 参数和 没有 返回值。程序执行顺序是:先执行包的 init 函数,最后执行main函数。
19
填空题
匿名函数可以通过 紧跟函数体后立即执行,语法为 。闭包是指 引用了 外部变量,这些变量的生命周期 延长 到闭包被释放时。
20
填空题
Go函数的基本语法: 关键字开始,后跟 ,参数列表在 内,返回类型在括号 后面。如果没有返回值,可以 省略 返回类型。
参考答案
1.正确
2.正确
3.正确
4.正确
5.正确
6.正确
7.正确
8.B
9.B
10.B
11.B
12.C
13.B
14.A;C;D;E
15.A;B;C;D
16.函数类型;type Name func(params) returns;赋值
17.panic;recover;defer
18.main;main;没有
19.括号;func(){...}();函数
20.func;函数名;括号
