Golang-ish way of doing things, так сказать.
предположим, что я имею следующий набор структур:
type DAGNode struct {
Placeholder bool `json:"placeholder"`
Data DAGNodeData `json:"data"`
}
type DAGNodeData struct {
PrevNodes []string `json:"prev_nodes"`
}
в моём приложении с этими структурами происходит две вещи:
1. они постоянно сериализируются/десериализируются из/в JSON
2. весьма часто мне нужно просто проверить, есть ли какое-либо значение в DAGNode.Data.PrevNodes.
отсутствие метода contains или подобного для списков в Go вынуждает либо:
1. использовать map вместо slice для хранения PrevNodes. это кажется мне неочевидным решением в данном случае - в json-репрезентации prev_nodes описаны списком, а не словарём. при (де)сериализации придётся конвертить список в map и обратно.
2. каждый раз писать базовые вещи вроде проверки наличия элемента в slice и удаления значения из slice. не-DRY-решение получается.
философский вопрос - как истинный Go-гуру поступил бы в данном случае? какое из решений является более эффективным и поощряется философией языка?
Если вы проверяете постоянно наличие элемента в списке, то это уже навевает мысль использовать именно map.
Обсуждают сегодня