跳到主要内容

go 基础面试题

· 阅读需 5 分钟
ahKevinXy
  1. Go 语言的特性是什么?

    • Go 是一门开源的、静态类型的编程语言,具有高效的编译速度和并发支持。
    • 它具有简洁的语法,包括垃圾回收机制、内置的并发支持(goroutines 和 channels)、强大的标准库等特性。
  2. 什么是 goroutines?

    • Goroutines 是 Go 语言中用于并发编程的轻量级线程。它们由 Go 运行时环境管理,并可以在程序内部高效地创建和销毁。
    • Goroutines 使用关键字 go 来启动,并且可以在同一个地址空间中进行通信,避免了传统线程间的显式锁定。
  3. channels 在 Go 中的作用是什么?

    • Channels 是用于在 goroutines 之间进行通信和同步的主要机制。
    • 通过 channels,不同的 goroutines 可以安全地发送和接收数据,并在需要时进行同步。
    • Channels 提供了一种方式来避免共享内存并发访问的问题,从而降低了并发编程的复杂性。
  4. Go 的切片和数组有什么区别?

    • 数组的长度是固定的,而切片的长度可以动态增长。
    • 切片是对数组的抽象,提供了更灵活的操作和使用方式。
    • 当你不确定需要多大的容量时,通常会使用切片而不是数组。
  5. Go 中的 defer 关键字有什么作用?

    • defer 关键字用于在函数退出时执行一些清理操作,无论函数是正常返回还是发生了 panic。
    • defer 语句会在函数退出前执行,并且可以多次调用,按照后进先出(LIFO)的顺序执行。
  6. Go 中的接口是如何工作的?

    • 接口是一种定义行为的抽象类型。一个对象只要实现了接口所定义的方法集合,就被认为是实现了该接口。
    • Go 中的接口是隐式实现的,即对象无需显式声明实现了某个接口,只要它们实现了接口所需的方法即可。
  7. Go 中的并发模型是什么?

    • Go 使用基于 CSP(Communicating Sequential Processes)的并发模型,其中 goroutines 通过 channels 进行通信。
    • 这种模型使得编写并发程序变得简单和直观,避免了传统线程编程中的锁和共享内存带来的复杂性和风险。
  8. Go 的标准库中有哪些常用的包?

    • 标准库中包含了大量常用的包,如 fmt(用于格式化输入输出)、net/http(用于构建 HTTP 服务器和客户端)、io(提供了基本的 I/O 操作)、os(用于操作操作系统功能)、encoding/json(用于 JSON 编码和解码)等等。
  9. 什么是 Go 的空接口?

    • 空接口是 Go 中的一个特殊接口,它不包含任何方法声明,因此任何类型都实现了空接口。
    • 空接口可以保存任何类型的值,因此在需要存储不同类型值的场景下非常有用,如在函数参数中传递任意类型的数据。

以上是一些关于 Go 语言的常见面试问题以及相应的详细解答。在面试前,确保对这些问题有所了解,并能够清晰地表达出来,同时也可以通过阅读官方文档和编写实践代码来加深对 Go 语言的理解。