doupapin172773 2019-03-25 10:48
浏览 110
已采纳

更新结构中的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)
}

The error that I get is

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

The values of the level string is "1" and "2".

  • 写回答

1条回答 默认 最新

  • douhuan1937 2019-03-25 11:36
    关注
    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()
    
    
    }
    

    maps are nil-able. Hence need to initialize them.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能