Jak poradzić sobie z null w GO

Jak poradzić sobie z null w GO

Dzisiaj miałem okazję wyprodukować trochę kody w GO, który miał coś wyciągać z MySQL. Dane pochodziły z tabeli, która miała strukturę z polami typu data datetime DEFAULT NULL. Problem pojawił się przy skanowaniu rekordów:

panic: sql: Scan error on column index 2: unsupported Scan, storing driver.Value type <nil> into type *time.Time

Problem pojawił się, ponieważ skaner nie potrafi przerobić null’a na datę. Generalnie można skorzystać z typu mysql.NullTime który znajduje się w pakiecie database/sql – dodaje on dodatkowe pole typu “Valid” które wskazuje na to, czy wartość jest typu NULL czy nie. Podobna obsługa jest dla pól typu string i numerycznych.

Problem pojawia się kiedy spróbujemy ten typ przerobić na JSON’a:

Data:mysql.NullTime{Time:time.Time{sec:0, nsec:0, loc:(*time.Location)(nil)}, Valid:false}

I można tutaj kombinować z nadpisywanie interfaceów, albo skorzystać z pakietu: gopkg.in/guregu/null.v3 . Ogarnia on sprawę za nas – wystarczy zmienić tylko typu na null.String