Go面试题集:第一弹:语法基础(共92题)-Part2(第11~第20题)

第一弹:语法基础(共92题)之Part2(第11~第20题)


文章目录

  • 第一弹:语法基础(共92题)之Part2(第11~第20题)
    • 面试题11:Golang中init()函数何时执行?
      • 11.1 答案解析
      • 11.2 最终答案
    • 面试题12:Golang中如何比较两个map是否相等?
      • 12.1 答案解析
        • 12.1.1 方法一:手动遍历比较
        • 12.1.2 方法二:使用 `reflect.DeepEqual`
        • 12.1.3 边界情况处理
      • 12.2 最终答案
    • 面试题13:Golang中的map可以一边遍历一边删除元素吗?
      • 13.1 答案解析
        • 13.1.1 允许操作:删除未遍历的键
        • 13.1.2 禁止操作:添加元素或删除已遍历的键
        • 13.1.3 未定义行为的风险
      • 13.2 最终答案
    • 面试题14:Golang中可以对map的元素取地址吗?
      • 14.1 答案解析
        • 14.1.1 语法限制
        • 14.1.2 底层原因
        • 14.1.3 替代方案
        • 14.1.4 特殊场景的误解
      • 14.2 最终答案
    • 面试题15:Golang中map的key为何无序?
      • 15.1 答案解析
        • 15.1.1 哈希表的固有特性
        • 15.1.2 安全性的刻意设计
        • 15.1.3 实现细节
        • 15.1.4. 有序需求的替代方案
      • 15.2 最终答案
    • 面试题16:Golang中map的扩容机制?
      • 16.1 答案解析
        • 16.1.1 触发条件
        • 16.1.2 扩容过程
        • 16.1.3. 设计优势
        • 16.1.4 示例与验证
      • 16.2 最终答案
    • 面试题17:Golang中map的数据结构是什么?
      • 17.1 答案解析
        • 17.1.1 顶层结构:`hmap`
        • 7.1.2 底层存储:`bmap`(桶结构)
        • 7.1.3. 关键设计特点
        • 7.1.4. 可视化存储结构
      • 17.2 最终答案
    • 面试题18:Golang中的float类型是否可以作为map的key?
      • 18.1 答案解析
        • 18.1.1 语言规范允许
        • 18.1.2 潜在风险
        • 18.1.3 替代方案
      • 18.2 最终答案
    • 面试题19:Golang中函数返回局部变量的指针是否安全?
      • 19.1 答案解析
        • 19.1.1 逃逸分析(Escape Analysis)
        • 19.1.2 与 C/C++ 的关键区别
        • 19.1.3 实际应用场景
        • 19.1.4 注意事项
      • 19.2 最终答案
    • 面试题20:Golang中非接口的任意类型T()都能够调用*T的方法吗?反之如何?
      • 20.1 答案解析
        • 20.1.1 方法集规则(Method Sets)
        • 20.1.2 核心问题分析
        • 20.1.3 接口实现的差异
        • 20.1.4 设计原理
      • 20.2 最终答案


面试题11:Golang中init()函数何时执行?

11.1 答案解析

在Go语言中,init()函数用于包的初始化,其执行时机和顺序遵循以下规则:

  1. 全局变量初始化优先
    包内的所有全局变量会在init()函数执行前完成初始化。这确保了init()函数可以安全地使用这些变量。

  2. 依赖包的初始化顺序
    若包A导入包B,则包B的init()函数会先于包A的init()执行。这种深度优先的递归初始化保证依赖项已就绪。

  3. 同一包内的多个init()函数
    同一个包中的多个init()函数按其在代码中的出现顺序依次执行。若分布在多个文件中,则按文件名的字典序执行。

你可能感兴趣的:(golang,开发语言,后端)