为什么结构内部的映射不接受赋值


type DateData struct {
Count     int
Districts map[string]int
}

这是我遇到问题的结构。

var dates = make(map[string]DateData)

这就是我初始化和使用所述结构的方式

为什么我会得到panic: assignment to entry in nil map的错误

当我试图给地区地图赋值时,如下所示:日期["1/06"]。地区["1"]=1我无法为区域字段分配值

以下是上下文的完整代码:

package main
import (
"encoding/csv"
"fmt"
"io"
"log"
"os"
"strings"
)
type Report struct {
Date      string `json:"date"`
Address   string `json:"address"`
District  string `json:"district"`
Beat      string `json:"beat"`
Grid      string `json:"grid"`
Crimedesc string `json:"crimedesc"`
UCRCode   string `json:"ucr_ncic_code"`
Lat       string `json:"latitude"`
Lon       string `json:"longitude"`
}
type DateData struct {
Count     int
Districts map[string]int
}
func main() {
reports := CreateReport()
var dates = make(map[string]DateData)
for _, report := range reports {
dateIndex := strings.LastIndex(report.Date, "/")
date := report.Date[0 : dateIndex+3]
val, ok := dates[date]
if !ok {
dates[date] = DateData{
Count: 1,
}
} else {
val.Count += 1
dates[date] = val
}
}
dates["1/1/06"].Districts["1"] = 1
fmt.Println("dates slice", dates)
// fmt.Println("dates slice", dates)
}
func CreateReport() []Report {
// csvFile, err := os.Open("./files/sacramento-jan-2006.csv")
csvFile, err := os.Open("./files/sacramento-test.csv")
if err != nil {
log.Fatal("error opeining file", err)
}
defer csvFile.Close()
reader := csv.NewReader(csvFile)
var reports []Report
for {
line, err := reader.Read()
if err == io.EOF {
break
} else if err != nil {
log.Fatal("error reading file", err)
}
reports = append(reports, Report{
Date:      line[0],
Address:   line[1],
District:  line[2],
Beat:      line[3],
Grid:      line[4],
Crimedesc: line[5],
UCRCode:   line[6],
Lat:       line[7],
Lon:       line[8],
})
}
return reports
}

它抱怨Districts映射,因为该映射为零。初始化为:

if !ok {
dates[date] = DateData{
Count: 1,
Districts: make(map[string]int),
}

最新更新