Как вернуть нулевое значение в пустое строковое поле в Голанге? - PullRequest
0 голосов
/ 13 марта 2019

У меня есть такие struct в приложении Golang:

type Employee struct {
    ID int `json:"employee_id"`
    Email *string `json:"employee_email"`
    LastName *string `json:"employee_last_name"`
    FirstName *string `json:"employee_first_name"`
    Sex *string `json:"employee_sex"`
}

Некоторые строковые поля этой структуры могут быть пустыми. Если я использую приложение *string, верните мне "". Если используете sql.NullString, то верните мне например такой результат:

"employee_last_name": {
    String: "",
    Valid: true
}

Я хочу показать null, если строковое поле пусто.

В документации Я нашел такой код:

type NullString struct {
    String string
    Valid  bool
}

func (ns *NullString) Scan(value interface{}) error {
    if value == nil {
        ns.String, ns.Valid = "", false
        return nil
    }
    ns.Valid = true
    return convertAssign(&ns.String, value)
}

func (ns NullString) Value() (driver.Value, error) {
    if !ns.Valid {
        return nil, nil
    }
    return ns.String, nil
}

Как я понимаю, этот код может помочь мне решить мою проблему, верно ?! Что мне нужно импортировать в моем приложении, чтобы использовать функцию convertAssign?

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Изменить:

То, что вы хотите сделать, невозможно в соответствии с документами oracle go driver :

sql.NullString

sql.NullString не поддерживается: Oracle DB не поддерживает различать пустую строку ("") и NULL

Оригинальный ответ:

Требуются дополнительные сведения о типе базы данных SQL, к которой вы подключаетесь. Я знаю, что go SQLite3 pkg - github.com/mattn/go-sqlite3 - поддерживает установку nil для значений типа *string.

Проверьте информацию о драйвере, который вы используете для подключения к базе данных. Например, для MySQL получение полей даты SQL в собственный тип структуры go time.Time не устанавливается по умолчанию - его необходимо включить на уровне драйвера .

0 голосов
/ 13 марта 2019

В спецификации языка Go nil не является допустимым значением для типа string. по умолчанию нулевое значение равно "".

Главный ответ на этот вопрос более детален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...