package main
import "fmt"
// 定义自定义结构体
type CustomStruct struct {
// 结构体字段根据实际需求定义
Field1 string
Field2 int
}
func main() {
// 初始化外层map
outerMap := make(map[string][]*map[int]*CustomStruct)
// 示例数据填充
key := "exampleKey"
innerMapSlice := make([]*map[int]*CustomStruct, 0)
innerMap := make(map[int]*CustomStruct)
customStruct := &CustomStruct{
Field1: "value1",
Field2: 123,
}
innerMap[1] = customStruct
innerMapSlice = append(innerMapSlice, &innerMap)
outerMap[key] = innerMapSlice
// 访问示例
if slices, ok := outerMap[key]; ok {
for _, innerMapPtr := range slices {
if innerMapPtr != nil {
for innerKey, customStructPtr := range *innerMapPtr {
if customStructPtr != nil {
fmt.Printf("Inner Key: %d, Field1: %s, Field2: %d\n", innerKey, customStructPtr.Field1, customStructPtr.Field2)
}
}
}
}
}
}
初始化步骤说明
- 外层map初始化:使用
make(map[string][]*map[int]*CustomStruct)
创建外层map,键为字符串,值为指向内层map切片的指针。
- 内层map切片初始化:使用
make([]*map[int]*CustomStruct, 0)
创建一个空的切片,切片元素为指向内层map的指针。
- 内层map及结构体初始化:使用
make(map[int]*CustomStruct)
创建内层map,并初始化自定义结构体CustomStruct
,将结构体指针放入内层map中。
- 将内层map放入切片并插入外层map:将内层map指针放入切片,然后将切片插入外层map。
避免常见错误
- 空指针引用:
- 在访问内层map和结构体时,先进行非空检查。如在示例代码中,访问
innerMapPtr
和customStructPtr
前都进行了!= nil
的判断,确保不会发生空指针引用。
- 在初始化时,使用
make
来分配内存,避免使用未初始化的变量。如make(map[string][]*map[int]*CustomStruct)
、make([]*map[int]*CustomStruct, 0)
和make(map[int]*CustomStruct)
,确保变量有有效的内存空间。