Golang面试题及答案(12道常考经典题解析)

Golang面试题及答案(12道常考经典题解析)-mikechen

Golang面试题经常会在面试中被问到,下面给大家总结了一份常考的Golang面试题及答案。

请解释一下 Go 语言的协程是什么?

答:协程Goroutine 是 Go 语言中的轻量级线程,可以在同一进程内运行并发代码。

一个Goroutine会以一个很小的栈启动2KB或4KB,当遇到栈空间不足时,栈会自动伸缩, 因此可以轻易实现成千上万个goroutine同时启动。

 

Go 语言中的并发模型是什么?

答:Go 语言中的并发模型是基于 Goroutine 和 channel 的 CSP(Communicating Sequential Processes)模型。

在 CSP 模型中,每个 Goroutine 都是一个轻量级的执行单元,它们之间通过 channel 进行通信和同步。

 

Go 语言中的错误处理机制是什么?

答:Go 语言中的错误处理机制通过返回错误对象来实现,在函数执行过程中,如果遇到错误,则可以通过返回一个错误对象来通知调用方。

调用方可以使用 if err != nil 的方式来判断函数是否返回了错误,并进行相应的处理。在处理错误时,可以使用 defer 和 recover 来捕获和处理错误。

 

Golang 中 make 和 new 的区别?

在 Go 中make 和 new 都是用于创建新的数据类型的关键字,但是它们的作用不同:

new 用于创建一个指定类型的零值,并返回其地址:

ptr := new(T)

这里的 T 是一个类型,ptr 是指向该类型的指针。

make 用于创建 slice、map 和 channel 等引用类型的数据结构,并返回其引用。

make 的语法如下:

ref := make(T, args)

总的来说,new 主要用于创建指向值类型的指针,而 make 主要用于创建引用类型的实例。

需要注意的是,make 只能用于创建 slice、map 和 channel 等引用类型的数据结构,而不能用于其他类型的数据结构。

 

请解释一下 Go 语言中的 interface 是什么?

答:interface 是 Go 语言中一种类型,它定义了一组方法的签名。

一个类型只要实现了这个接口定义的所有方法,就被认为是实现了该接口。接口可以被用于实现多态,即一个对象可以以多种形式表现,只要实现了相应的接口。

 

请描述一下 Go 语言中的 map 是什么?

答:map 是 Go 语言中的一种集合类型,它由键值对组成,map 可以使用内置的 make 函数创建,并且可以使用 range 关键字对 map 进行迭代。

 

请描述一下 Go 语言中的 defer 语句?

答:defer 语句用于在函数返回之前执行一些操作,defer 语句通常用于资源清理、文件关闭等操作。

当一个函数中有多个 defer 语句时,它们的执行顺序是栈式的,即最后一个 defer 语句先执行,第一个 defer 语句最后执行。

 

Go 语言中的 channel 是什么?它有什么作用?

答:Channel 是 Go 语言中的一种并发原语,用于 Goroutine 之间的通信。

Channel 可以被用于两个或多个 Goroutine 之间传递消息或同步执行。

Channel 提供了阻塞操作,当数据从一个 Goroutine 发送到一个空的 channel 时,发送者会被阻塞,直到接收者准备好接收数据为止。

 

Go 语言中的 slice 有什么特点?

答:slice 是 Go 语言中的一种动态数组,它可以根据需要动态增长或缩小。

slice 可以使用内置的 make 函数创建,并且可以通过索引操作访问其中的元素。

slice 是一个引用类型,它包含一个指向底层数组的指针、长度和容量信息。slice 的长度表示其中元素的个数,容量则表示其中最多可以容纳的元素个数。

 

请解释一下 Go 语言中的指针是什么?

答:指针是一个变量,其值为另一个变量的内存地址。

在 Go 语言中,指针可以被用于间接访问变量的值,可以使用 & 运算符获取一个变量的地址,使用 * 运算符可以获取该地址对应的值。

 

请解释一下 Go 语言中的垃圾回收是什么?

答:Go 语言中的垃圾回收(garbage collection)是一种自动内存管理机制,它可以自动地释放不再被程序使用的内存。

垃圾回收器会周期性地扫描程序中所有已分配的对象,并标记那些不再被使用的对象,然后将它们的内存释放回系统。Go 语言的垃圾回收器使用了一种叫做“三色标记法”的算法,它可以在不暂停程序执行的情况下完成垃圾回收。

 

请解释一下 Go 语言中的 defer、panic 和 recover 的关系?

答:defer、panic 和 recover 是 Go 语言中用于处理异常的关键字。当一个函数中出现了 panic 语句时,程序会停止执行并开始执行函数的 defer 语句,直到所有 defer 语句执行完毕后,程序会向上返回到调用该函数的地方,并继续执行该函数的 defer 语句。如果在执行 defer 语句时调用了 recover 函数,则程序会停止向上返回,而是继续向下执行。recover 函数可以获取到 panic 的参数,并且在需要时可以将程序恢复到正常状态。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法