type DateData struct {
Count int
Districts map[string]int
}
这就是我遇到问题的结构。
var dates = make(map[string]DateData)
这就是我初始化和使用上述结构的方式
为什么会出现panic: assignment to entry in nil map
错误
当我尝试为地区地图赋值时: dates"1/1/06".Districts"1“=1我无法为地区字段赋值
以下是context的完整代码:
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
}
回答开始:得票数 1
它抱怨Districts
映射,因为该映射为空。将其初始化为:
if !ok {
dates[date] = DateData{
Count: 1,
Districts: make(map[string]int),
}
总结
以上是真正的电脑专家为你收集整理的为什么结构中的map不能接受赋值的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得真正的电脑专家网站内容还不错,欢迎将真正的电脑专家推荐给好友。
有话要说...