freeCodeCamp/guide/russian/go/go-structs/index.md

120 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Go Structs
localeTitle: Go Structs
---
## Go Structs
В Go структуры используются для хранения данных и связанных функций. Примером может быть структура, представляющая пользователя:
```go
type User struct {
FirstName string
LastName string
Email string
Age int
}
```
Здесь мы можем сохранить имя пользователя, фамилию, адрес электронной почты и возраст. За именем свойства следует тип данных, которые мы хотим сохранить. Например, свойство `FirstName` является `string` тогда как свойство `Age` является `int` .
### Создание объектов
Чтобы инициализировать новый объект, мы можем использовать синтаксис сокращения строк для создания и назначения переменных. Мы можем либо передать данные в этот момент, либо установить данные позднее:
```go
func main() {
// Create a user and set both the first and last name properties
user1 := User{
FirstName: "John",
LastName: "Wick",
}
// Now we have our user object, we can set the data like this
user1.Email = "john@wick.com"
user1.Age = 30
}
```
### Методы объекта
Go позволяет назначать методы для структур. Это позволяет группировать соответствующие операции с данными, которые он затрагивает. В этом примере мы напишем метод в структуре `User` для генерации полного имени пользователя:
```go
func (u User) FullName() string {
return strings.Join([]string{u.FirstName, u.LastName}, " ")
}
```
Этот метод будет соединяться с первым и последним именем пользователя с промежутком между ними. Вызов метода может выглядеть так:
```go
println(user1.FullName())
```
### Теги структуры
Теги Struct используются для изменения способа обработки данных кодами. Например, задание имен ключей при кодировании JSON:
```go
type User struct {
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
Email string `json:"email"`
Age int `json:"age"`
}
```
### Экспортированные данные
Структуры могут содержать как экспортированные (общедоступные), так и неэкспортированные (частные) свойства. Это устанавливается либо с первой буквой в верхнем регистре для экспорта, либо с первой буквой в нижнем регистре для невыполненных. В этом примере мы сделаем свойство электронной почты приватным:
```go
type User struct {
// Exported Data
FirstName string
LastName string
Age int
// Unexported Data
email string
}
```
Выполнение этого приведет к тому, что следующий код выведет ошибку во время сборки, поскольку она пытается взаимодействовать с неконтролируемым свойством:
```go
user1.email = "john@wick.com"
```
Это также относится к методам:
```go
// Exported method. This can be called from anywhere
func (u User) Email() {
return u.email
}
// Unexported method. This can only be called by other methods on this struct
func (u User) updateLoginCount {
// code to update login count...
}
```
### Изменение свойств с помощью методов
Чтобы изменить данные объекта из одного из его методов, объект должен быть указателем. Пример может выглядеть так:
\`\` \`Идти // SetEmail устанавливает адрес электронной почты пользователя func (u \* User) SetEmail (строка электронной почты) { u.email = электронная почта }
// Аксессуар электронной почты func (u \* User) Электронная почта () string { вернуть u.email }
func main () { // Создание указателя user1 user1 = & User { FirstName: «Джон», LastName: «Wick», }
```
// Set the user's email address
user1.SetEmail("john@wick.com")
// Access and print the user's email address
println(user1.Email())
```
}