170 похожих чатов

У меня вопрос философский на счет аргументов функций в Go. Скажем,

у меня есть функция типа 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
}

4 ответов

13 просмотров

Зачем ее возвращать если это указатель?

Если структура большая, то насколько оптимально её копировать?

Возвращать копию - делать лишний объект gc, менять по указателю - не совсем правильно. Правильно написать метод

Dmitriy Sviridov
Если структура большая, то насколько оптимально её...

Если нужна имутабельность, то иначе никак. Если нет, то накладно да может быть но надо тестировать.

Похожие вопросы

Обсуждают сегодня

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Всем привет. Испытываю проблемы в работе БД, а именно огромного роста логов, такого характера: 024-05-16 18:39:07 +05 sentry sentry [unknown] 1050169 7-1 app-sentry01.corp.ru>...
Alexey
2
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
В дельфе нет никакого коробочного (без установки третьих либ) способа получить CallStack с расшифровкой отладочных символов?
notme
7
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
Карта сайта