Простой способ реализовать структуру данных временной очереди в Go - это использовать срез:
- чтобы добавить в очередь, вы используете встроенную функцию append
- чтобы удалить из очереди - срезать первый элемент
var queue []string
queue = append(queue, "Hello ") // Добавление в очередь
queue = append(queue, "world!")
for len(queue) > 0 {
fmt.Print(queue[0]) // Первый элемент
queue = queue[1:] // Удаление из очереди
}
Вывод:
Hello world!
Остерегайтесь утечек памяти
Вы можете удалить первый элемент перед удалением из очереди.
// Удаление из очереди
queue[0] = "" // Удаляем элемент
// (записываем нулевое значение)
queue = queue[1:]
Предупреждение: память, выделенная для массива, никогда не возвращается. Для долгоживущей очереди вам, вероятно, следует использовать динамическую структуру данных, такую как связанный список.
Связанный список
Пакет container/list реализует двусвязный список, который можно использовать в качестве очереди.
queue := list.New()
queue.PushBack("Hello ") // Добавление в очередь
queue.PushBack("world!")
for queue.Len() > 0 {
e := queue.Front() // Первый элемент
fmt.Print(e.Value)
queue.Remove(e) // Удаление из очереди
}
Вывод:
Hello world!
Читайте также:
- Массивы, срезы и строки: механика работы append в Golang
- Срезы в Golang: внутреннее устройство и использование
- Эффективный Go: срезы (slices)
Комментариев нет:
Отправить комментарий