Изменить структурное поле в функции или вернуть значение - PullRequest
0 голосов
/ 22 сентября 2018

В конце концов, этот вопрос наверняка будет зависеть от личных предпочтений.Тем не менее, я хотел бы осмелиться попытаться выяснить, какой стиль является предпочтительным.

Недавно я заметил несоответствия в моем коде.У меня есть структура с некоторыми полями.Теперь вопрос заключается в том, какой идиоматический способ редактировать это поле, когда мне нужно вызвать функцию, чтобы получить значение, которое я хочу установить.Я устанавливаю значение внутри функции, или я возвращаю его и устанавливаю в своей вызывающей функции?

type SuperStruct struct {
    OneValue     string
    AnotherValue string
}

func (s *SuperStruct) makeAnotherValue() {
    s.AnotherValue = "Hello there"
}

func main() {
    superStruct := SuperStruct{}
    superStruct.makeAnotherValue()
}

или (с той же структурой)

func (s *SuperStruct) makeAnotherValue() string {
    return "Hello there"
}

func main() {
    superStruct := SuperStruct{}
    superStruct.AnotherValue = superStruct.makeAnotherValue()
}

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

1 Ответ

0 голосов
/ 22 сентября 2018

Я думаю, что идиоматическим способом было бы полностью удалить вашу функцию:

func main() {
    superStruct := SuperStruct{AnotherValue:"Hello there"}
}

или

func main() {
    superStruct := SuperStruct{}
    ...
    superStruct.AnotherValue = "Hello there"
}

Не создавайте функции получения / установки / создания функций, если они не являются абсолютнонеобходимо, просто сделайте необходимую работу.Если вы просто устанавливаете простое поле, вам не нужна фабрика, чтобы сделать значение поля в большинстве случаев.Если вы считаете, что функция необходима, она должна быть намного более сложной, чем эта (по крайней мере, в несколько строк), и обычно она называется NewAnotherValue и не привязана к родительской структуре.

Каждое косвенное обращение через другоеФункция / структура делает код более сложным для отслеживания.

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