Встретиться с проблемой обработки данных в go. У меня есть список интерфейсов
[SUSPENDED_PROCESS]
[MITRE_T1055_PROCESS_INJECT MODIFY_PROCESS]
<nil>
<nil>
[ENUMERATE_PROCESSES MITRE_T1057_PROCESS_DISCOVERY]
[MODIFY_MEMORY_PROTECTION]
<nil>
[SUSPENDED_PROCESS]
[MODIFY_MEMORY_PROTECTION]
<nil>
[SUSPENDED_PROCESS]
<nil>
[MODIFY_MEMORY_PROTECTION]
<nil>
<nil>
[SUSPENDED_PROCESS]
[MITRE_T1055_PROCESS_INJECT MODIFY_PROCESS]
Я хочу объединить этот [] интерфейс {} в один интерфейс {}, исключая значения nil и дедупликацию. Пока это мой код.
for _, event := range results.([]interface{}) {
if tid, found := event.(map[string]interface{})["threatIndicators"]; found {
fmt.Println(tid) //these are the interfaces i want to merge
if tid != nil { //concatenate all non null tids
for k, v := range tid.([]interface{}) { //iterate through each tid
tidList[k] = v
// fmt.Println(tidList)
}
}
}
}
Проблема, с которой я сталкиваюсь, состоит в том, что эти карты имеют неуникальные ключи (ключ - это индекс на карте). Так что мой код будет перезаписан, если ключи одинаковые, что произойдет в этом случае. Есть ли способ сделать это? В python это было бы простое понимание списка, но я изо всех сил пытаюсь понять, как выполнить sh в Go. Конечным результатом будет одна карта, в идеале содержащая все эти значения. У меня, к сожалению, нет контроля над этой структурой, я анализирую данные из API.