Есть ли недостаток использования указателя в структуре? - PullRequest
0 голосов
/ 01 ноября 2019

Я играю с mysql и возвращаю результат в массив структур.

type User struct {
    FirstName string
    LastName  string
}

Go не допускает значения nil в виде строки, но если я создаю указатели на строки

type User struct {
    FirstName *string
    LastName  *string
}

тогда это разрешено, и я могу анализировать значения NULL из базы данных в строки nil.

Есть ли определенный недостаток использования указателей для разрешения nil? Любая причина, почему я должен работать с более чем громоздким подходом NullString?

type NullString struct {
    String string
    Valid bool
}

1 Ответ

1 голос
/ 01 ноября 2019

Недостатки очевидны, но в основном они также имеют свои преимущества:

  1. Теперь указатель может быть нулевым. Возможно, вам придется обрабатывать этот случай по-другому (потому что указатель может быть ноль), что означает, что вы должны написать больше кода. Это также является его преимуществом: вам может потребоваться обработать этот случай по-другому (для проблемы, которую вы хотите решить, то есть), и в этом случае вам нужен способ пометить «не существует» отдельно от «содержимое ___». Возможность установить указатель на ноль дает вам это различие.

  2. Поскольку имеется указатель, вы можете поделиться базовыми данными. Это также является его собственным преимуществом.

  3. На самом деле использование данных требует одного дополнительного уровня косвенности. (Это чистый недостаток - здесь нет никаких преимуществ.)

...