как создать параметр функции, который не будет скопирован и не может быть нулевым - PullRequest
1 голос
/ 30 марта 2019

В golang, возможно ли создать функцию, которая принимает структуру со следующими ограничениями:

  • структура не должна копироваться (ее относительно большая)
  • вызывающая сторонане должно быть в состоянии передать nil

РЕДАКТИРОВАТЬ: я пытался использовать указатели, но это может быть установлено на ноль.Я не могу найти хороших статей о том, как использовать ссылки, и, похоже, я не могу перейти по ссылке.

1 Ответ

2 голосов
/ 30 марта 2019

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

Что-то вроде:

type StructHolder struct {
    target *BigStruct
}

func (s StructHolder) Get() *BigStruct {
    if s.target == nil {
        panic("target is nil")
    }

    return s.target
}

Зачем вы это делаете?Я думаю, что лучше передать указатель и проверить его значение.

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