GO pg предотвратить значение по умолчанию

Образец структуры

type Car struct {
    ID              uint64
    Required        bool                   `pg:"required,notnull"`
    Name            string                 `pg:"name"`
    }

Миграция:

BEGIN;

ALTER TABLE cars ADD COLUMN required BOOLEAN NOT NULL DEFAULT true;

END;

Когда я создаю структуру автомобиля:

car = Car{Name:"Name",Required:false}

Когда я пытаюсь добавить новую машину, написав:

_, err = r.db.Model(&car).Insert()

SQL-запрос выглядит так:

INSERT INTO "cars" ("id", "name", "required") VALUES (DEFAULT, "Name", DEFAULT)

Основная проблема в том, что у автомобиля обязательное поле установлено как false, но когда я его вставляю - оно меняется на DEFAULT (true).

Вы создаете Автомобиль с помощью required, но поле структуры Required

Schwern 18.03.2022 17:27

Не беда) Это была моя опечатка

kyrkela 18.03.2022 17:40

Этот SQL-запрос не может быть правильным. "Name" — столбец Name. 'Name' — строковое значение Name. Должно быть VALUES (DEFAULT, 'Name', DEFAULT). Так что же такое настоящий запрос и настоящий код?

Schwern 18.03.2022 19:10
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
1
3
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Потому что значение false будет прочитано как нулевое значение. Поскольку нулевое значение, ваши данные будут изменены на значение по умолчанию (ИСТИНА)

Вы должны изменить структуру, чтобы она понравилась

type Car struct {
    ID       uint64
    Required *bool  `pg:"required,notnull,default:true"`
    Name     string `pg:"name"`
}

и определите структуру, подобную этой

required := false
car = Car{Name:"Name", Required: &required}

или вы также можете использовать тип данных sql.NullBool в своей структуре

type Car struct {
    ID       uint64
    Required sql.NullBool  `pg:"required,notnull,default:true"`
    Name     string `pg:"name"`
}

car = Car{Name:"Name", Required: sql.NullBool{Bool: false, Valid: true}}

Основная проблема заключается в том, что когда я пытаюсь добавить много автомобилей без указания обязательного поля, я хочу, чтобы оно было обязательным как истинное. Ваше решение в этом случае устанавливает для всех автомобилей значение false (

kyrkela 18.03.2022 23:12

@kyrkela добавьте тег default:true в свою структуру, чтобы принудительно указать требуемое значение как true, если поле не установлено. я уже обновил свой ответ

Abdul Hamid 19.03.2022 08:34

Другие вопросы по теме