go - 更新结构中的 map[string]*struct 变量
问题描述
package main
import "fmt"
type State string
const (
// PASS check passed.
PASS State = "PASS"
// FAIL check failed.
FAIL = "FAIL"
// WARN could not carry out check.
WARN = "WARN"
// INFO informational message
INFO = "INFO"
// SKIP for tests skipped
SKIP = "SKIP"
)
// SummaryLevelWise is a summary of results of control checks run CIS Levelwise
type Something struct{
SummaryLevelWise map[string]*Summary
}
// Summary is a summary of the results of control checks run.
type Summary struct {
Pass int `json:"total_pass"`
Fail int `json:"total_fail"`
Warn int `json:"total_warn"`
Info int `json:"total_info"`
Skip int `json:"total_skip"`
}
func main() {
s := &Something{}
s.doingSomething()
// This is one way I tried to update the map[string]*struct variable
s.SummaryLevelWise["1"].Pass, s.SummaryLevelWise["1"].Fail, s.SummaryLevelWise["1"].Warn, s.SummaryLevelWise["1"].Info, s.SummaryLevelWise["1"].Skip = 0,0,0,0,0
// Another way that didn't work
// s.SummaryLevelWise["1"] = &Summary{0,0,0,0,0}
}
func summarizeLevel(summary *Summary) {
switch PASS{
case PASS:
summary.Pass++
case FAIL:
summary.Fail++
case WARN:
summary.Warn++
case INFO:
summary.Info++
case SKIP:
summary.Skip++
}
}
func(something *Something ) doingSomething(){
level1 := "1"
for i:=0; i<10; i++ {
summarizeLevel(something.SummaryLevelWise[level1])
}
fmt.Println(something)
}
我得到的错误是
恐慌:运行时错误:无效的内存地址或零指针取消引用 [信号 SIGSEGV:分段违规代码 = 0x1 地址 = 0x0 pc = 0x1091ac4]
goroutine 1 [运行]: main.summarizeLevel(...) /Users/i345678/go/src/github.concur.com/test/test/main.go:68 main.(*Something).doingSomething(0xc00000c028) /用户/i345678/go/src/github.concur.com/test/test/main.go:89 +0x64 main.main() /Users/i345678/go/src/github.concur.com/test/test/main .go:58 +0x44 退出状态 2
级别字符串的值为“1”和“2”。
解决方案
func main() {
s := &Something{}
// Intialize map.
s.SummaryLevelWise = map[string]*Summary{}
//s.SummaryLevelWise["1"].Pass, s.SummaryLevelWise["1"].Fail, s.SummaryLevelWise["1"].Warn, s.SummaryLevelWise["1"].Info, s.SummaryLevelWise["1"].Skip = 0,0,0,0,0
s.SummaryLevelWise["1"] = &Summary{0,0,0,0,0}
s.doingSomething()
}
地图是可零的。因此需要初始化它们。
推荐阅读
- php - Woocommerce 错误 ET_WC_Order::get_total()
- php - Laravel 访问 HasMany 关系的 BelongsTo 模型
- git - 每次我提交时都会删除 Composer 包
- chatbot - 如何在 Dialogflow 的 webhook 中执行插槽验证?
- javascript - 自动化 Priority-Web-SDK 文件上传
- django - Django-rest-auth 和 AWS - 错误 401
- fortran - Fortran 子例程参数在调用时被更改
- apache-spark - 从 PySpark 运行大量 Hive 查询
- arrays - 查找二维数组中有多少个圆的算法
- ios - 拆分视图控制器中的大标题奇怪行为