面试题答案
一键面试package main
import "fmt"
// 定义嵌套结构体
type InnerStruct struct {
InnerArray [3]int
InnerSlice []string
InnerMap map[string]int
}
type OuterStruct struct {
OuterArray [2]InnerStruct
OuterSlice []InnerStruct
OuterMap map[string]InnerStruct
}
// 初始化结构体的函数
func InitOuterStruct() OuterStruct {
inner1 := InnerStruct{
InnerArray: [3]int{1, 2, 3},
InnerSlice: []string{"a", "b", "c"},
InnerMap: map[string]int{"one": 1, "two": 2},
}
inner2 := InnerStruct{
InnerArray: [3]int{4, 5, 6},
InnerSlice: []string{"d", "e", "f"},
InnerMap: map[string]int{"three": 3, "four": 4},
}
outer := OuterStruct{
OuterArray: [2]InnerStruct{inner1, inner2},
OuterSlice: []InnerStruct{inner1, inner2},
OuterMap: map[string]InnerStruct{
"first": inner1,
"second": inner2,
},
}
return outer
}
分隔符使用说明
- 结构体定义:
- 在定义结构体时,使用
{
和}
来包裹结构体的字段列表。每个字段独占一行,以提高代码的可读性,例如:
- 在定义结构体时,使用
type InnerStruct {
InnerArray [3]int
InnerSlice []string
InnerMap map[string]int
}
- 注意 `{` 紧跟在结构体名称之后,不要换行,这是Go语言的语法要求。
2. 数组定义:
- 定义数组时,使用 [N]Type
的形式,N
表示数组的长度,Type
是数组元素的类型。例如 [3]int
,这里的 [
和 ]
是数组的定义分隔符。
-
切片定义:
- 定义切片时,使用
[]Type
的形式,例如[]string
,这里只有[
和]
之间没有数字,表示这是一个切片类型。
- 定义切片时,使用
-
映射定义:
- 定义映射时,使用
map[KeyType]ValueType
的形式,例如map[string]int
,这里map
关键字后面的[
和]
定义了映射的键类型,大括号{}
用于初始化映射时定义键值对。
- 定义映射时,使用
-
结构体初始化:
- 初始化结构体时,使用
{}
来包裹初始化值。如果结构体有嵌套,同样使用{}
来包裹嵌套结构体的初始化值,层次要清晰。例如:
- 初始化结构体时,使用
inner1 := InnerStruct{
InnerArray: [3]int{1, 2, 3},
InnerSlice: []string{"a", "b", "c"},
InnerMap: map[string]int{"one": 1, "two": 2},
}
- 每个字段的初始化值独占一行,`{` 紧跟在字段类型之后(如数组初始化 `[3]int{1, 2, 3}`),不同字段之间不需要额外的分隔符(不像其他语言可能需要逗号),最后一个字段后面也不需要逗号。对于映射初始化,键值对之间使用 `:` 分隔,不同键值对之间使用逗号分隔,整体用 `{}` 包裹。