RU (Русский) Перевод

Привет,野心勃勃 программисты! Сегодня мы отправимся в увлекательное путешествие в мир структур на языке Go. Не волнуйтесь, если вы никогда раньше не писали код - я буду вашим доброжелательным проводником, и мы будем исследовать эту тему шаг за шагом. Так что возьмите杯 кофе (или чай, если это ваше дело), и lets погружаться!

Go - Structures

Что такое структуры в Go?

Прежде чем мы начнем, давайте поймем, что такое структуры. Представьте, что вы создаете цифровой адресную книгу. Для каждого контакта вам нужно хранить различные фрагменты информации, такие как имя, номер телефона и адрес электронной почты. Структура в Go позволяет вам объединить эти связанные между собой данные под одним именем. Это как создание пользовательского типа данных,tailored к вашим конкретным потребностям.

Теперь давайте脏 our руки с кодом!

Определение структуры

Чтобы определить структуру в Go, мы используем ключевое слово type, за которым следует имя структуры и ключевое слово struct. Вот как мы можем определить структуру для нашей цифровой адресной книги:

type Contact struct {
    Name        string
    PhoneNumber string
    Email       string
}

В этом примере мы создали структуру под названием Contact с тремя полями: Name, PhoneNumber, и Email, все типа string.

Давайте разберем это:

  • type говорит Go, что мы определяем новый тип
  • Contact - это имя, которое мы даем нашей структуре
  • struct указывает, что этот тип - это структура
  • Внутри фигурных скобок мы перечисляем наши поля, каждое из которых имеет свой тип

Доступ к членам структуры

Теперь, когда мы определили нашу структуру, давайте создадим экземпляр и обратимся к его членам:

func main() {
    myFriend := Contact{
        Name:        "Alice",
        PhoneNumber: "123-456-7890",
        Email:       "[email protected]",
    }

    fmt.Println("Name:", myFriend.Name)
    fmt.Println("Phone:", myFriend.PhoneNumber)
    fmt.Println("Email:", myFriend.Email)
}

Вот что происходит:

  1. Мы создаем новый Contact под названием myFriend
  2. Мы инициализируем его поля конкретными значениями
  3. Мы доступ и печать каждое поле, используя точечную нотацию (myFriend.Name, и т.д.)

Когда вы запустите этот код, вы увидите контактную информацию Alice, напечатанную. Неужели это не здорово?

Структуры как аргументы функции

Структуры становятся еще более мощными, когда мы используем их с функциями. Давайте создадим функцию, которая выводит информацию о контакте:

func printContact(c Contact) {
    fmt.Printf("Name: %s\nPhone: %s\nEmail: %s\n", c.Name, c.PhoneNumber, c.Email)
}

func main() {
    myFriend := Contact{
        Name:        "Bob",
        PhoneNumber: "098-765-4321",
        Email:       "[email protected]",
    }

    printContact(myFriend)
}

В этом примере:

  • Мы определяем функцию printContact, которая принимает Contact в качестве аргумента
  • В main(), мы создаем новый Contact для Bob
  • Мы передаем myFriend в printContact, который затем выводит информацию о Bob

Этот подход позволяет нам повторно использовать код и работать с нашими данными более эффективно.

Указатели на структуры

Теперь давайте поговорим о указателях. Не дайте этому термину напугать вас - указатели это просто переменные, которые хранят адреса других переменных. Они особенно полезны с структурами, когда мы хотим изменить исходные данные.

Вот пример:

func updateEmail(c *Contact, newEmail string) {
    c.Email = newEmail
}

func main() {
    myFriend := Contact{
        Name:        "Charlie",
        PhoneNumber: "111-222-3333",
        Email:       "[email protected]",
    }

    fmt.Println("Before update:", myFriend.Email)
    updateEmail(&myFriend, "[email protected]")
    fmt.Println("After update:", myFriend.Email)
}

Давайте разберем это:

  1. Мы определяем updateEmail, который принимает указатель на Contact и новый адрес электронной почты
  2. В main(), мы создаем Contact для Charlie
  3. Мы печатали исходный адрес электронной почты Charlie
  4. Мы вызываем updateEmail, передавая адрес myFriend и новый адрес электронной почты
  5. Мы снова печатаем адрес электронной почты Charlie, чтобы увидеть изменение

Символ & перед myFriend в вызове функции дает нам адрес myFriend, которыйneeded указателю в updateEmail.

Использование указателя позволяет нам напрямую изменить исходную Contact, а не работать с копией.

Методы в Go

Вот таблица некоторых часто используемых методов для работы со структурами в Go:

Метод Описание Пример
Определение Определяет метод для структуры func (c Contact) FullName() string
Получатель Структура, с которой связан метод (c Contact) в предыдущем примере
Указатель на получателя Позволяет методу изменять структуру func (c *Contact) UpdateEmail(newEmail string)
Вызов метода Как вызвать метод для структуры myFriend.FullName()

Заключение

Поздравляю! Вы только что сделали свои первые шаги в мир структур на языке Go. Мы рассмотрели, как определять структуры, доступ к их членам, использовать их с функциями и даже немного окунулись в указатели.

помните, что обучение программированию похоже на изучение нового языка - это требует практики и терпения. Не отчаивайтесь, если все не сработает сразу. Продолжайте экспериментировать с этими концепциями, пытайтесь создавать свои структуры и, что самое главное, наслаждайтесь процессом!

За годы моей работы учителем я обнаружил, что студенты, которые наслаждаются процессом обучения, tend к тому чтобы стать лучшими программистами. Так что смело встречайте вызовы,庆祝уйте свои победы (даже если они малы), и продолжайте программировать!

До следующего раза, счастливого Go-инга!

Credits: Image by storyset