面试题答案
一键面试结构体
- 初始化:
- 在初始化结构体时,字段间用逗号分隔。例如:
type Person struct { Name string Age int } p := Person{ "John", // 这里字段值间用逗号分隔 30, }
- 也可以使用具名初始化,此时同样用逗号分隔不同字段的赋值:
p := Person{ Name: "John", Age: 30, }
- 赋值:
- 对结构体变量进行赋值时,如果是更新多个字段,同样遵循逗号分隔的规则。例如:
p := Person{} p.Name, p.Age = "Jane", 25
- 类型嵌套:
- 当结构体嵌套时,内部结构体作为外部结构体的一个字段,整体遵循结构体定义和初始化的逗号分隔规则。例如:
type Address struct { City string Zip string } type Employee struct { Name string Age int Address Address } e := Employee{ "Bob", 35, Address{ "New York", "10001", }, }
- 使用不当影响:
- 如果在结构体初始化时遗漏逗号,例如
p := Person{"John" 30}
,会导致编译错误,提示语法错误。因为Go语言依靠逗号来区分不同的字段值。
- 如果在结构体初始化时遗漏逗号,例如
数组
- 初始化:
- 数组初始化时元素间用逗号分隔。例如:
var nums [3]int nums = [3]int{1, 2, 3}
- 也可以通过索引初始化特定位置的元素,同样用逗号分隔:
var nums [5]int nums = [5]int{0: 1, 2: 3} // 索引0处为1,索引2处为3
- 赋值:
- 对数组元素逐个赋值时,在语句中每个赋值语句用分号(Go语言中一般可省略)或换行分隔,而每个元素赋值语句内部是正常的赋值操作。例如:
var nums [3]int nums[0] = 1 nums[1] = 2 nums[2] = 3
- 类型嵌套:
- 多维数组初始化时,每一层数组元素间都用逗号分隔。例如二维数组:
var matrix [2][3]int matrix = [2][3]int{ {1, 2, 3}, // 内部数组元素用逗号分隔 {4, 5, 6}, }
- 使用不当影响:
- 如果初始化数组时遗漏逗号,如
nums := [3]int{1 2 3}
,会导致编译错误,因为Go语言需要逗号来确定数组元素的边界。
- 如果初始化数组时遗漏逗号,如
切片
- 初始化:
- 切片初始化方式多样,字面量初始化时元素间用逗号分隔。例如:
s := []int{1, 2, 3}
- 使用
make
函数初始化后再赋值,赋值时元素间同样用逗号分隔:
s := make([]int, 3) s[0], s[1], s[2] = 1, 2, 3
- 赋值:
- 对切片追加元素时,
append
函数中多个元素间用逗号分隔。例如:
s := []int{1, 2} s = append(s, 3, 4)
- 对切片追加元素时,
- 类型嵌套:
- 多维切片初始化类似多维数组,每一层切片元素间用逗号分隔。例如二维切片:
s := [][]int{ {1, 2, 3}, {4, 5, 6}, }
- 使用不当影响:
- 在
append
函数中如果遗漏逗号,如s = append(s, 3 4)
,会导致编译错误,因为Go语言需要逗号来区分追加的不同元素。
- 在