Я храню двойной связанный список в PostgreSQL. У меня есть Go API для управления этим списком.
Есть функция, которая создает новые Node
(в указанной позиции c). Давайте предположим, что внутри него есть запрос INSERT SQL.
Также есть функция, которая удаляет Node
(по id). Давайте предположим, что внутри него есть запрос DELETE SQL.
Хорошо известно, что если вам нужно переместить Node
в другую позицию, вы должны вызвать функцию DeleteNode () и функцию CreateNode (). Таким образом, существует третья функция MoveNode ()
func MoveNode() error {
if err := DeleteNode(); err != nil {
return err
}
if err := CreateNode(); err != nil {
return err
}
return nil
}
Но эти функции (которые находятся внутри MoveNode () должны вызываться в одной транзакции.
Есть ли способ «объединить» функции в Go? Или как решить эту проблему (кроме копирования и вставки кода из двух функций в третью)?
ps Идея проста: у вас есть две функции, которые выполняют несколько SQL запросов, и вам нужно выполнить эти запросы в одной транзакции (или вызвать 2 функции в одной транзакции)