Для создания динамических SQL запросов в Go можно использовать библиотеку github.com/Masterminds/squirrel. Эта библиотека позволяет строить SQL запросы из фрагментов запроса, что делает их динамическое создание более удобным.
Для создания билдера SQL запросов в Go с помощью библиотеки squirrel можно реализовать следующую функцию, которая принимает список необходимых полей и условий для фильтрации, и возвращает готовый SQL запрос:
```
import (
"github.com/Masterminds/squirrel"
"strings"
)
func buildQuery(fields []string, filters map[string]interface{}) squirrel.Sqlizer {
sb := squirrel.Select(strings.Join(fields, ",")).From("your_table_name")
for key, value := range filters {
sb = sb.Where(squirrel.Eq{key: value})
}
return sb
}
```
Пример использования этой функции:
```
fields := []string{"id", "name"}
filters := map[string]interface{}{"status": "active"}
query := buildQuery(fields, filters)
sql, args, _ := query.ToSql()
fmt.Println(sql, args)
```
Чтобы избежать необходимости писать дополнительный код для обработки динамических фильтров для различных таблиц в базе данных, можно создать универсальную функцию, которая принимает имя таблицы, список полей и фильтров в качестве аргументов.
Для оптимального проектирования фильтров рекомендуется использовать map[string]interface{}, где ключ - это название столбца, а значение - условие для фильтрации. Однако, важно обеспечить корректный формат передаваемых данных и защиту от SQL инъекций.
Будет полезно также добавить обработку сортировки, лимита и оффсета, если это необходимо для вашей логики.
Надеюсь, что данная информация будет полезна для вас. Если у вас есть какие-либо вопросы или нужна дополнительная помощь, не стесняйтесь обращаться.