Как добавить элементы на карту [string] [] Struct - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь добавить элементы в эту структуру, которая у меня есть:

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, возможно?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Есть ошибки в коде:

  1. Inet тип не определен
  2. AuditSource тип не содержит Id используется в NewAuditSource функция
  3. AuditSourceDifferences функция не содержит оператор if
  4. Вы добавляете (вероятное) несуществующее значение массива, используя индексы 0 и 1 в AuditSourceDifferences функции
  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
}

0 голосов
/ 14 апреля 2020

Вы, похоже, инициализировали карту, поэтому, скорее всего, ошибка в том, что вы обращаетесь к несуществующим элементам среза. Когда вы инициализируете срез, он будет пустым, и в нем нет 0-го или 1-го элемента:

src:=a.Source["Primary"]
src=append(src,Pgm{MulticastPort:a})
src=append(src,Pgm{MulticastPort:b})
a.Source["Primary"]=src
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...