cpp

Передача структур в функцию

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

Листинг 11.5. Передача структуры в функцию

package main

import "fmt"

type MyStruct struct {
   X, Y int
   arr []int
}

func main() {
   obj1 := MyStruct{10, 20, []int{1, 2}}
   obj2 := MyStruct{30, 40, []int{3, 4}}
   test1(obj1)
   fmt.Println(obj1)      // {10 20 [77 2]}
   test2(&obj2)
   fmt.Println(obj2)      // {88 40 [3 4]}
}
func test1(o MyStruct) {  // Передается копия структуры
   o.X = 88               // Не влияет на исходную структуру
   o.arr[0] = 77          // Можно изменить значения элементов слайса
}
func test2(o *MyStruct) { // Передается адрес структуры
   o.X = 88               // Изменяется значение структуры obj2
}

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp