一、Go 基础语法

  1. Go 的主要特点有哪些?

    • 静态类型、编译型、并发原生支持(goroutine + channel)、内存安全、垃圾回收、跨平台、语法简洁。
  2. Go 有哪些内置基本数据类型?

    • 整型:int8, int16, int32, int64, int
    • 无符号整型:uint8(byte), uint16, uint32, uint64, uint
    • 浮点型:float32, float64
    • 复数:complex64, complex128
    • 字符:rune
    • 布尔:bool
    • 字符串:string
  3. Go 变量声明方式?

    1
    2
    3
    var a int = 10
    var b = 20
    c := 30 // 短变量声明
  4. Go 常量和 iota 的作用?

    • const 定义常量。
    • iota 是常量计数器,用于枚举。
    1
    2
    3
    4
    5
    const (
    A = iota // 0
    B // 1
    C // 2
    )
  5. 字符串在 Go 中是可变的吗?

    • 不可变。修改字符串必须转成 []byte[]rune

二、Go 容器类型

  1. 切片 (slice) 和数组 (array) 区别?
    • 数组:长度固定,值类型。
    • 切片:基于数组实现,长度可变,引用类型。
  2. map 的特点?
    • 哈希表实现,map[key]value
    • key 必须可比较(不能是 slice、map、function)。
    • 访问不存在的 key 返回零值。
  3. range 的返回值?
    • 遍历 slice/array:返回 index 和 value。
    • 遍历 map:返回 key 和 value。
    • 遍历 string:返回索引和 rune。

三、函数与方法

  1. Go 支持函数重载吗?
    • 不支持。
  2. defer 的执行顺序?
  • 后进先出 (LIFO)
  1. 值传递 vs 引用传递?
  • Go 所有参数都是值传递。
  • 传引用类型(slice、map、channel、指针)时,值里存的是底层数据地址。

四、结构体与接口

  1. 结构体和类的区别?
  • Go 没有类,只有结构体(struct)。
  • 没有继承,支持组合。
  1. Go 的接口特点?
  • 隐式实现,无需显式 implements
  • 接口是方法集合,零值是 nil
  1. 空接口 interface{} 的作用?
  • 可存放任意类型,相当于 Java 的 Object

五、并发与协程

  1. goroutine 是什么?
  • Go 的轻量级线程,由 Go runtime 调度。比 OS 线程更轻。
  1. channel 的作用?
  • 在 goroutine 之间安全传递数据。
  • 支持无缓冲、有缓冲。
  1. select 的作用?
  • 多路复用,用于监听多个 channel。

六、内存与 GC

  1. Go 的垃圾回收机制?
  • 三色标记 + 混合写屏障。
  1. make 和 new 的区别?
  • new(T) 分配内存,返回指针,零值初始化。
  • make 用于 slice、map、chan 初始化,返回对象。
  1. 逃逸分析 (escape analysis) 是什么?
  • 编译器决定变量分配在栈还是堆。

七、常见陷阱题

  1. for range 遍历 slice 时修改值会怎样?
  • 修改循环变量不会影响原切片,要用索引操作。
  1. nil slice 和空 slice 区别?
  • nil slicevar s []intlen=0, cap=0
  • 空 slices := []int{}len=0, cap=0,但非 nil。
  1. map 并发读写会怎样?
  • 直接 panic,需要 sync.Map 或加锁。
  1. defer 在 return 前还是后执行?
  • 在 return 之后,但返回值赋值之前

八、标准库与实践

  1. 常见 Go 标准库?
  • fmt:格式化 I/O
  • net/http:HTTP 服务
  • sync:并发同步
  • time:时间操作
  • osiobufio:文件操作
  1. Go 如何处理错误?
  • 使用 error 接口,返回值明确错误。
  • 不支持异常捕获,只有 panic/recover