go - 更新结构中的 map[string]*struct 变量

标签 go

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)
}

我得到的错误是

panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x1091ac4]

goroutine 1 [running]: main.summarizeLevel(...) /Users/i345678/go/src/github.concur.com/test/test/main.go:68 main.(*Something).doingSomething(0xc00000c028) /Users/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 exit status 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()


}

map 是空的。因此需要初始化它们。

关于go - 更新结构中的 map[string]*struct 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55336073/

相关文章:

go - os.Error - 字符串值(Golang)

戈朗 : 32-bit access to mmap'd "/dev/mem" region

go - 在并发环境中从 map 中删除是否安全?在戈兰

ssl - Golang 中的 TLS 连接问题

arrays - 在给定数组中查找整数序列

Golang,更改自定义客户端 MaxIdleConnsPerHost 的结构

Golang 界面 slice

go - 如何将 Unicode 字符更改为简单形式?

go - go.mod 中的 'incompatible' 是什么意思,会不会造成伤害?

postgresql - 使用 github.com/mgutz/dat 库运行示例脚本