1

当我尝试访问结构字段时出现错误

无效的内存地址或 nil 指针取消引用。gdreport/main.go:30 +0x1e6

我对错误一无所知:

这是我的代码:

var strPtr []*string

var findingId []string = []string{"findingid"}

strPtr = aws.StringSlice(findingId)

maxResult := int64(8)

condition := map[string]*guardduty.Condition{}
condition["id"].Equals = strPtr

第 30 行条件 ["id"].Equals = strPtr

用于 golang 的 aws sdk https://docs.aws.amazon.com/sdk-for-go/api/service/guardduty/#Condition type

4

1 回答 1

0

因为condition是空mappointers,所以你得到from的nil值。*guardduty.Conditioncondition

根据Go maps in action

一个二值赋值测试一个键的存在:

i, ok := m["route"]

在此语句中,第一个值 (i) 被分配存储在键“路由”下的值。如果该键不存在,则 i 是值类型的零值 (0)。第二个值 (ok) 是一个布尔值,如果键存在于映射中,则为 true,否则为 false。

将您的代码段更改为

if cond, ok := condition["id"]; !ok { // <nil> false
    log.Println("Pointer is null")
} else {
    // Init new guardduty.Condition
    // and assign to required key
    nc := &guardduty.Condition{Equals:strPtr}
    condition["id"] = nc
}
于 2020-11-03T03:12:22.457 回答