全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 22 道配套习题

GO函数专题

专题说明

本专题系统讲解Go语言函数的基础知识,从函数定义语法到参数返回值处理,从匿名函数闭包到defer延迟执行,从panic/recover机制到函数作为值使用,全面覆盖Go函数核心概念,适合Go语言入门学习者掌握函数编程基础。

学习目标

  1. 掌握Go函数的基本定义语法和特性
  2. 理解函数参数传递机制(值传递)和参数简化写法
  3. 掌握多返回值、命名返回值和可变参数函数
  4. 理解匿名函数与闭包的概念和常见用途
  5. 掌握defer的执行时机、顺序和常见应用场景
  6. 理解panic/recover机制及适用场景
  7. 掌握函数作为值和高阶函数的使用方法

学习内容

本专题涵盖以下核心知识点:

函数定义与声明

  • func关键字定义函数
  • Go不支持函数重载
  • 函数基本语法结构
  • main函数与init函数的特点

函数参数与返回值

  • 多返回值特性(任意数量)
  • 参数类型简化写法(相邻同类型可省略)
  • 可变参数函数(...type语法)
  • 命名返回值(自动初始化、可被defer修改)
  • 参数传递方式(值传递,指针实现引用效果)

匿名函数与闭包

  • 匿名函数定义(func关键字无函数名)
  • 闭包捕获外部变量特性
  • 闭包常见用途(工厂函数、回调、状态封装)
  • goroutine中的闭包陷阱

延迟执行defer

  • defer执行时机(函数返回前)
  • defer执行顺序(后进先出LIFO)
  • defer参数预计算特性
  • defer常见用途(关闭资源、解锁、记录时间)

panic与recover

  • panic触发异常机制
  • recover捕获异常(必须在defer中)
  • panic/recover适用场景
  • Go的错误处理哲学(error而非异常)

函数作为值与高阶函数

  • 函数类型定义(type Name func(params) returns)
  • 函数赋值给变量
  • 函数作为参数传递
  • 函数作为返回值
  • 高阶函数应用场景

学习建议

  1. 循序渐进:先掌握基本语法,再学习高级特性(闭包、defer)
  2. 实践验证:编写代码验证defer执行顺序和闭包捕获特性
  3. 理解原理:理解Go参数值传递的本质,避免混淆引用传递
  4. 最佳实践:掌握panic/recover的正确使用场景,避免滥用

📝 配套习题(22 题)

💡 参考答案在文末
判断题
1

defer语句中的参数在定义时就已计算,而非在执行时计算。

A

B

2

Go语言不支持函数重载(同名函数不同参数)。

A

B

3

Go中init函数是特殊的函数,会在包加载时自动执行,无需手动调用。

A

B

4

当多个连续参数类型相同时,可以省略前面的类型声明,只保留最后一个的类型。

A

B

5

Go语言推崇使用error返回值处理错误,而非异常机制。

A

B

6

高阶函数是指接收函数作为参数或返回函数作为结果的函数。

A

B

7

recover函数只能在defer函数中调用才能捕获panic。

A

B

8

Go的闭包可以捕获并修改外部函数的局部变量。

A

B

单选题
9

Go中函数可以赋值给变量,这种特性称为?

A

函数重载

B

函数作为值(函数类型)

C

函数继承

D

函数嵌套

10

Go语言中定义函数使用哪个关键字?

A

function

B

func

C

def

D

define

11

Go中命名返回值的主要优势是什么?

A

减少函数调用开销

B

可以被defer修改,简化代码

C

自动初始化为零值

D

以上都是

12

Go函数参数传递的方式是?

A

只支持值传递

B

只支持引用传递

C

值传递,但可以通过指针实现引用传递效果

D

自动选择值传递或引用传递

13

Go中panic的作用是?

A

输出错误日志

B

终止当前函数并触发异常处理流程

C

返回错误信息给调用者

D

等待用户输入处理错误

14

Go中定义匿名函数的方式是?

A

使用lambda关键字

B

使用func关键字但没有函数名

C

使用arrow函数语法

D

使用function关键字

15

Go语言函数最多可以返回多少个值?

A

1个

B

2个

C

任意多个

D

最多3个

16

Go中defer语句的执行时机是?

A

在定义defer的位置立即执行

B

在函数返回之前执行

C

在函数返回之后执行

D

在程序结束时执行

17

Go中定义可变参数函数使用什么语法?

A

使用...params表示任意参数

B

使用params...type表示可变参数

C

使用*params表示指针参数

D

使用[]params表示数组参数

多选题
18

Go中defer的常见用途包括?

A

关闭文件资源

B

解锁互斥锁

C

记录函数执行时间

D

循环中使用defer释放资源

E

错误处理

19

Go中闭包的常见用途包括?

A

创建工厂函数

B

实现回调机制

C

捕获循环变量

D

实现状态封装

E

替代全局变量

填空题
20

Go函数的基本语法:____________ 关键字开始,后跟 ____________,参数列表在 ____________ 内,返回类型在括号 后面。如果没有返回值,可以 省略 返回类型。

21

Go中 ____________ 函数用于触发异常,____________ 函数用于捕获异常。recover必须在 ____________ 函数中调用才有效,否则返回 nil。panic触发后会执行当前函数的所有 defer 语句,然后向上传播。

22

多个defer语句按 ____________ (LIFO) 顺序执行,即 ____________ 定义的defer ____________ 执行。defer语句会在函数 返回前 执行,即使函数发生 panic 也会执行所有defer。

参考答案
1.正确 2.正确 3.正确 4.正确 5.正确 6.正确 7.正确 8.正确 9.B 10.B 11.D 12.C 13.B 14.B 15.C 16.B 17.B 18.A;B;C 19.A;B;C;D 20.func;函数名;括号 21.panic;recover;defer 22.后进先出;最后;最先
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 GO内存管理与性能优化专题
下一个专题 → GO变量与常量专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码