Параметр-структура в Go
Давайте теперь будем передавать в функцию структуру. Внутри видны ее поля. Тип параметра совпадает с объявленным типом структуры. При вызове в функцию попадает копия значения, как при присваивании между переменными этого типа.
Выведем возраст из переданной записи функцией show:
package main
import "fmt"
type User struct {
Name string
Age int
}
func show(u User) {
fmt.Println(u.Age)
}
func main() {
client := User{Name: "ann", Age: 20}
show(client) // выведет 20
}
Внутри show имя u содержит копию client. Поля
читают через точку, как у обычной переменной структуры.
Вернуть одно поле можно функцией func с тем же типом
параметра:
package main
import "fmt"
type User struct {
Name string
Age int
}
func func(u User) int {
return u.Age
}
func main() {
client := User{Name: "max", Age: 30}
fmt.Println(func(client)) // выведет 30
}
Дана структура:
type Item struct {
Title string
Price int
}
one := Item{Title: "book", Price: 12}
Напишите функцию func с параметром Item, которая
возвращает поле Price. Выведите результат для one.
Напишите функцию func с параметром User, которая
меняет поле Name внутри на "copy" и печатает его.
Проверьте, что имя в исходной переменной снаружи не меняется.
Скажите, копия или общий экземпляр попадает в параметр при передаче структуры.