1. Возврат копии структуры
Функция возвращает значение, изменения копии не затронут оригинал:
func returnCopy() MyStruct {
return MyStruct{Value: 1}
}2. Возврат указателя на структуру
Позволяет избежать копирования и работать напрямую с объектом в памяти:
func returnPointer() *MyStruct {
return &MyStruct{Value: 2}
}3. Изменение через указатель-параметр
Функция принимает указатель и напрямую изменяет оригинальный объект без возврата:
func modifyStruct(s *MyStruct) {
s.Value = 3
}4. Возврат части структуры
Возвращает только нужное поле, а не всю структуру целиком:
func returnValue(s MyStruct) int {
return s.Value
}5. Возврат через интерфейс
Позволяет скрыть конкретную реализацию за абстракцией:
type MyInterface interface { DoSomething() }
func returnInterface() MyInterface {
return MyStruct{}
}6. Срезы и мапы структур
Возврат набора структур через срез или ассоциативный массив:
func returnSlice() []MyStruct {
return []MyStruct{{Value: 4}, {Value: 5}}
}
func returnMap() map[string]MyStruct {
return map[string]MyStruct{
"first": {Value: 6},
"second": {Value: 7},
}
}7. Возврат через канал
Передача структуры между горутинами для конкурентных сценариев:
func sendToChannel(ch chan MyStruct) {
ch <- MyStruct{Value: 8}
}Эти подходы можно комбинировать и адаптировать под разные сценарии — учитывая требования к производительности и управлению памятью.
🐸 Библиотека Go для собеса