MST

星途 面试题库

面试题:Go中数组初始化的不同方式及应用场景

请详细阐述Go语言中数组初始化的至少三种不同方式,并说明每种方式通常适用于哪些具体的应用场景。例如,在处理固定大小且初始值有规律的数据集合时,哪种初始化方式更为合适。
24.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 直接初始化并指定所有元素值
    • 语法var arr [n]type = [n]type{value1, value2, ..., valueN} 或者 arr := [n]type{value1, value2, ..., valueN}。例如:var numbers [3]int = [3]int{1, 2, 3} 或者 numbers := [3]int{1, 2, 3}
    • 适用场景:适用于数组大小固定且已知每个元素具体值的场景,比如定义一个星期几的数组 days := [7]string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。在这种场景下,开发人员确切知道数组每个位置的内容,这种初始化方式最为直观和简单。
  2. 根据初始化值自动推断数组大小
    • 语法var arr = [...]type{value1, value2, ..., valueN} 或者 arr := [...]type{value1, value2, ..., valueN}。例如:var numbers = [...]int{1, 2, 3} 或者 numbers := [...]int{1, 2, 3}。这里编译器会根据初始化值的个数自动推断数组的大小。
    • 适用场景:当你不确定数组大小,但确切知道元素值时适用。比如在从配置文件中读取一系列固定值,而值的数量可能会在未来有微小变化的场景。如果使用固定大小声明,每次配置文件值数量变化时都需要修改数组大小声明,而这种方式则无需修改。
  3. 使用索引初始化特定位置元素
    • 语法var arr [n]type = [n]type{index1: value1, index2: value2, ...} 或者 arr := [n]type{index1: value1, index2: value2, ...}。例如:var scores [5]int = [5]int{0: 90, 2: 85} 或者 scores := [5]int{0: 90, 2: 85}。这样数组中索引为0的元素值是90,索引为2的元素值是85,其他未指定的元素为其类型的零值(这里int类型零值为0)。
    • 适用场景:适用于数组中大部分元素为零值(或默认值),仅少数特定位置元素有特殊值的场景。比如在统计学生成绩时,成绩表中大部分学生成绩为0(未考试),只有少数学生有实际成绩,就可以用这种方式初始化数组来记录成绩。
  4. 初始化零值数组
    • 语法var arr [n]type。例如:var numbers [5]int。此时数组中的所有元素会被初始化为其类型的零值,对于int类型是0,string类型是"" 等。
    • 适用场景:在需要一个固定大小的数组,且后续会逐步填充其元素值的场景。比如在一个循环中从数据库读取数据填充到数组中,先初始化一个合适大小的零值数组,再逐步更新每个元素。
  5. 使用循环初始化数组
    • 语法
var arr [n]type
for i := 0; i < n; i++ {
    arr[i] = someValueGenerator(i)
}

例如,生成一个包含1到100的整数数组:

var numbers [100]int
for i := 0; i < 100; i++ {
    numbers[i] = i + 1
}
  • 适用场景:在处理固定大小且初始值有规律的数据集合时非常合适。比如生成一个等差数列数组,或者生成一个按照某种规则计算得出值的数组。