зрения логики если не нужно копирование и хочется чтобы функции/методы изменяли оригинал - поинтеры, нет - значения
еще думал что с точки зрения логики копирование значения переменной более ресурсоемко, нежели создание на нее нового поинтера.
и тут в статье написали что порой копирование новой переменной будет быстрее о_О.
Кто копался в этой области, подскажите есть смысл заморачиваться с поинтерами если мы используем ну например конструкцию типа
struct {
A int
B string
}?
А если просто var A int?
Можно конечно это все решить на этапе оптимизации, но хочется сразу толковый код писать (очевидно), чтобы меньше потом геммороится
Копирование указателя в го происходит быстрее, чем копирование структуры, т.к. указатель в го - это _структура_ которая копируется (вот так вот, да) и в которой хранится тип и адрес уже непосредственно данных в памяти. А вот обращение к данным по ссылке конечно медленее - цена за разыменовывание. В го ГЦ работает не так, как в дотнете или жаве. В дотнете, объекты ГЦ маркируются тремя генерациями, всякие локальные переменные и мелкая требуха попадает в первую генерацию и чиститься первее всех. В го же оптимизация происходит на этапе компиляция, которая называется Escape Analysis, суть в которой, что многие объекты выделяются не на куче, а на стеке и сразу уничтожаются, что обнаруживается семантическим анализом их использования компилятором. Передавать по ссылке версус Передавать по значению Преждевременная оптимизация зло, потому ориентироваться на недокументированные оптимизации компилятора и гадание выделится ли структура на стеке или в куче не имеет смысла. Я выработал концептуально такую систему: 1. Передавать структуру по значению, если мы предполагаем ее использование как иммутабельную (но тут не забывайте, что мапы и слайсы все равно будут мутабельны) 2. Передача ссылки предполагая, что объект будет изменяться функцией, в которую мы ее передаем 3. Понимать указатель как nilable (nullable) значение, чтобы проверить, мол не проинициализировано ли значение 4. Использовать указатели когда надо избежать копирования В общем, как-то так
Обсуждают сегодня