Вставьте NULL для времени. Время, декодированное из JSON

Я создаю прототип конечных точек REST поверх существующей производственной БД и застрял в столбце даты и времени с нулевым значением. Я уже читал такие темы, как Nullable time.Time in golang или Извлечение значения даты и времени NULL в MySQL с использованием GORM, но не может отправить новый объект в Конечная точка REST и сохраните незарегистрированный атрибут даты и времени из JSON как NULL в MariaDB.

Я отправляю HTTP-запрос, например

POST /countries
{ "iso_code" : "CZ", "title" : "Czechia" }

Таблица имеет следующую схему

create table country
(
    iso_code   char(2)                              not null comment 'Country alpha-2 ISO code'
        primary key,
    title      varchar(255)                         null comment 'Country name',
    created_on datetime default current_timestamp() not null,
    updated_on datetime                             null on update current_timestamp()
)

Я уже пробовал тип mysql.NullTime, тип time.Time в качестве указателя, указав sql:DEFAULT:NULL в сопоставлении, сопоставление gorm:"null", я также напрямую назначил nil в newCountry.UpdatedAt прямо перед его сохранением. Хук BeforeSave gorm также не имел значения.

Режим довольно явный

    type Country struct {
        IsoCode string `json:"iso_code" gorm:"primary_key" sql:"size:2"`
        Title *string `json:"title,omitempty" gorm:"null" sql:"size:255"`
        CreatedAt *time.Time `json:"created_at,omitempty" gorm:"column:created_on"`
       UpdatedAt *time.Time `json:"updated_at,omitempty" gorm:"column:updated_on;null" sql:"DEFAULT:NULL"`
    }

Я использую GORM для хранения объекта

func CreateCountry(country *m.Country) *m.Country {
    fmt.Println(country)

    existingCountry := GetCountry(country.IsoCode)
    if existingCountry == nil {
        err := GetDB().Create(country).Error
        // ...
    } 
    // ...
}

Здесь в методе страна не имеет значения для UpdatedAt, но вызывается Create(country), он сохраняет точное значение для обоих столбцов даты и времени.

Я читаю это из тела HTTP-запроса, подобного этому

var CreateCountry = func(w http.ResponseWriter, r *http.Request) {
    fmt.Println(r.Body)

    newCountry := &m.Country{}
    err := json.NewDecoder(r.Body).Decode(newCountry)
    // ...
}

Также здесь у тела нет атрибутов даты и времени.

Не уверен, что еще можно сделать для создания инструкции вставки, например

INSERT  INTO `country` (`iso_code`,
`title`,`created_on`,`updated_on`) VALUES (?,?,?,?)[KR 0xc0001f6130 null null] 

и не

INSERT  INTO `country` (`iso_code`,
`title`,`created_on`,`updated_on`) VALUES (?,?,?,?)[KR 0xc0001f6130 2019-03-31 03:16:41.5158848 +0200 CEST m=+16.4487208
01 2019-03-31 03:16:41.5158848 +0200 CEST m=+16.448720801]

person jspetrak    schedule 31.03.2019    source источник
comment
Что, если вы скажете nil вместо null в [KR 0xc0001f6130 null null]?   -  person Rick James    schedule 09.05.2019