#go
#Вперед
Вопрос:
Возможно ли в golang создать функцию, которая принимает структуру со следующими ограничениями:
- структура не должна копироваться (она относительно большая)
- вызывающий объект не должен иметь возможности передавать
nil
РЕДАКТИРОВАТЬ: Я пробовал использовать указатели, но для них можно установить значение null. Я не могу найти ни одной хорошей статьи о том, как использовать ссылки, и не похоже, что я могу передавать по ссылке.
Комментарии:
1. Нет. Но это слишком короткий ответ.
Ответ №1:
Вы можете создать оболочку tiny struct, которая содержит частный указатель на большую структуру и определяет Get
метод, позволяющий получить доступ к этой большой структуре. Внутри Get
вы проверяете, равен ли указатель нулю, тогда он паникует.
Что-то вроде:
type StructHolder struct {
target *BigStruct
}
func (s StructHolder) Get() *BigStruct {
if s.target == nil {
panic("target is nil")
}
return s.target
}
Зачем вам это делать? Я бы подумал, что лучше передать указатель и проверить его значение.
Комментарии:
1. вот что я в итоге сделал. Я просто не хотел еще одну проверку в моей функции, потому что ее уже трудно прочитать.