-3

我正在尝试将项目附加到我拥有的这个结构中:

type AuditSource struct {
    Source      map[string][]Pgm  `json:"Source"`
}

type Pgm struct {
    ID            uint   `json:"id,omitempty"`
    SourceIP      Inet   `json:"sourceip,omitempty"`
    MulticastPort int `json:"multicastport,omitempty"`
}


func NewAuditSource(lid string) (a *AuditSource) {
    a = &AuditSource{
        Id:              make(map[string]uint64),
        Source:          make(map[string][]Pgm),
    }
    return
}

func (as *AuditSource) AuditSourceDifferences(a, b int) bool{

        if a != b {
            as.Source["Primary"][0].MulticastPort =a //ERRORS out every time
            as.Source["Primary"][1].MulticastPort =b 

        }
       return true
}

知道为什么每次尝试向其中添加内容时我的 struct map[string][]Pgm 都会出错吗?我可能需要初始化 []Pgm 吗?

4

2 回答 2

0

您似乎已经初始化了地图,因此错误很可能是因为您正在访问切片的不存在元素。初始化切片时,它是空的,并且没有第 0 个或第 1 个元素:

src:=a.Source["Primary"]
src=append(src,Pgm{MulticastPort:a})
src=append(src,Pgm{MulticastPort:b})
a.Source["Primary"]=src
于 2020-04-13T21:26:55.260 回答
0

代码中有一些错误:

  1. Inet类型未定义
  2. AuditSource类型不包含函数中Id使用的NewAuditSource
  3. AuditSourceDifferences函数不包含if语句
  4. AuditSourceDifferences您正在使用函数中的索引 0 和 1 附加一个(可能的)不存在的数组值
  5. a您对输入值 ( a, b int) 和结构接收器 ( )使用了相同的名称 ( )a *AuditSource)

尝试使用以下代码

package yourPackage

type AuditSource struct {
    Source map[string][]Pgm `json:"Source"`
    Id     map[string]uint64
}

type Pgm struct {
    ID            uint `json:"id,omitempty"`
    SourceIP      Inet `json:"sourceip,omitempty"`
    MulticastPort int  `json:"multicastport,omitempty"`
}

func NewAuditSource(lid string) (a *AuditSource) {
    a = &AuditSource{
        Id:     make(map[string]uint64),
        Source: make(map[string][]Pgm),
    }
    return
}

func (a *AuditSource) AuditSourceDifferences(i, j int) bool {
    if i != j {
        a.Source["Primary"] = append(a.Source["Primary"], Pgm{MulticastPort: i},Pgm{MulticastPort: j})
    }
    return true
}

于 2020-04-14T09:49:12.220 回答