у меня есть функция типа func fixSomething(data mystruct) mystruct {}, которой я передаю структуру чтобы сделать в ней некоторые математические поправки.
По хорошему правилу иммутабельности, я бы должен в этой функции склонировать входящую структуру, произвести мутации и вернуть новую структуру.
А что если… я на вход буду просить не pointer, а просто структуру (она ведь в памяти скопируется?), например:
func fixSomething(data mystruct) *mystruct {
data.someDigit = 10
return &data
}
на сколько это считается плохой или хорошей практикой в Go?
Альтернативой вижу конечно же:
func fixSomething(data *mystruct) *mystruct {
clonnedData := data.Clone()
clonnedData.someDigit = 10
return clonnedData
}
Зачем ее возвращать если это указатель?
Если структура большая, то насколько оптимально её копировать?
Возвращать копию - делать лишний объект gc, менять по указателю - не совсем правильно. Правильно написать метод
Если нужна имутабельность, то иначе никак. Если нет, то накладно да может быть но надо тестировать.
Обсуждают сегодня