Методы в Golang

Зарегистрируйтесь и зарабатывайте 1000$ в день ⋙

Методы в Golang  похожи на функции, но с одним существенным отличием: у них есть аргумент- получатель , который позволяет получить доступ к свойствам получателя . Приемник может иметь тип struct или non-struct, но оба должны находиться в одном пакете. Невозможно создавать методы для типов, определенных в других пакетах, включая встроенные типы, такие как int или string ; В противном случае компилятор сообщит об ошибке.

Методы в Golang

Например:

package main

import "fmt"

// Định nghĩa một struct
type person struct {
    name string
    age  int
}

// Định nghĩa một phương thức với struct receiver
func (p person) display() {
    fmt.Println("Name:", p.name)
    fmt.Println("Age:", p.age)
}

func main() {
    // Tạo một phiên bản của struct
    a := person{name: "a", age: 25}
    
    // Gọi phương thức
    a.display()
}

Результат:

Name: a
Age: 25

Синтаксис

func(receiver_name Type)  method_name(parameter_list) (return_type) { 
// Code
}

Приемник: Доступ к нему можно получить с помощью этого метода.

Метод с приемником структурного типа

В Go можно определить метод, в котором получатель имеет тип struct. Приемник доступен внутри метода. Предыдущий пример иллюстрирует этот подход с помощью Receiver типа struct.

Метод с приемником не является структурным типом

Go также позволяет методам иметь неструктурные приемники, если тип приемника и определение метода находятся в одном пакете. Вы не можете определить метод с типом приемника из другого пакета (например, int, string).

Например:

package main

import "fmt"

// Tạo một kiểu tùy biến dựa trên int
type number int

// Định nghĩa một phương thức với receiver không phải struct
func (n number) square() number {
    return n * n
}

func main() {
    a := number(4)
    b := a.square()

    fmt.Println("Square of", a, "is", b)
}

Результат:

Square of 4 is 16

Метод с указателем приемника

В Go методы могут иметь приемники-указатели. Это позволяет отражать изменения, внесенные в метод, в вызывающей стороне, что невозможно при использовании приемников значений.

Синтаксис:

func (p *Type) method_name(...Type) Type {    // Code}

Например:

package main

import "fmt"

// Defining a struct
type person struct {
    name string
}

// Phương thức với receiver pointer để chỉnh sửa dữ liệu
func (p *person) changeName(newName string) {
    p.name = newName
}

func main() {
    a := person{name: "a"}
    
    fmt.Println("Before:", a.name)
    
    // Gọi phương thức này để thay đổi tên
    a.changeName("b")
    
    fmt.Println("After:", a.name)
}

Результат:

Before: a
After: b

Метод принимает как указатель, так и значение.

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

Например:

package main
import "fmt"

type person struct {
    name string
}
// Phương thức với receiver pointer
func (p *person) updateName(newName string) {
    p.name = newName
}

// Phương thức với receiver value 
func (p person) showName() {
    fmt.Println("Name:", p.name)
}

func main() {
    a := person{name: "a"}
    
    // Gọi phương thức con trỏ cùng giá trị
    a.updateName("b")
    fmt.Println("After pointer method:", a.name)
    
    // Gọi phương thức giá trị với con trỏ
    (&a).showName()
}

Результат:

After pointer method: b
Name: b

Разница между методом и функцией

Метод Челюсть
Содержит приемник. Не содержит приемник
Можно определить методы с одинаковым именем, но разными типами. Функции с одинаковыми именами, но разными типами не допускаются.
Не может использоваться в качестве превосходной степени. Могут использоваться как объекты высшего порядка
Sign up and earn $1000 a day ⋙

Leave a Comment

Разница между обычным телевизором и Smart TV

Разница между обычным телевизором и Smart TV

Умные телевизоры действительно покорили мир. Благодаря множеству замечательных функций и возможности подключения к Интернету технологии изменили то, как мы смотрим телевизор.

Почему в морозильной камере нет подсветки, а в холодильнике есть?

Почему в морозильной камере нет подсветки, а в холодильнике есть?

Холодильники — привычные бытовые приборы. Холодильники обычно имеют 2 отделения: холодильное отделение просторное и имеет подсветку, которая автоматически включается каждый раз, когда пользователь ее открывает, а морозильное отделение узкое и не имеет подсветки.

2 способа устранения перегрузки сети, которая замедляет Wi-Fi

2 способа устранения перегрузки сети, которая замедляет Wi-Fi

На сети Wi-Fi влияют многие факторы, помимо маршрутизаторов, пропускной способности и помех, но есть несколько разумных способов улучшить работу вашей сети.

Как перейти с iOS 17 на iOS 16 без потери данных с помощью Tenorshare Reiboot

Как перейти с iOS 17 на iOS 16 без потери данных с помощью Tenorshare Reiboot

Если вы хотите вернуться к стабильной версии iOS 16 на своем телефоне, вот базовое руководство по удалению iOS 17 и понижению версии с iOS 17 до 16.

Что происходит с организмом, если вы едите йогурт каждый день?

Что происходит с организмом, если вы едите йогурт каждый день?

Йогурт — замечательная еда. Полезно ли есть йогурт каждый день? Как изменится ваше тело, если вы будете есть йогурт каждый день? Давайте узнаем вместе!

Какой вид риса лучше всего подходит для здоровья?

Какой вид риса лучше всего подходит для здоровья?

В этой статье рассматриваются наиболее питательные виды риса и способы максимально увеличить пользу для здоровья любого выбранного вами вида риса.

Как просыпаться вовремя утром

Как просыпаться вовремя утром

Установление режима сна и отхода ко сну, смена будильника и корректировка рациона питания — вот некоторые из мер, которые помогут вам лучше спать и вовремя просыпаться по утрам.

Советы по игре Rent Please! Симулятор арендодателя для новичков

Советы по игре Rent Please! Симулятор арендодателя для новичков

Арендуйте, пожалуйста! Landlord Sim — мобильная игра-симулятор для iOS и Android. Вы будете играть за владельца жилого комплекса и начнете сдавать квартиры в аренду, чтобы улучшить интерьер своих апартаментов и подготовить их к приему арендаторов.

Последние коды защиты башни в ванной и как вводить коды

Последние коды защиты башни в ванной и как вводить коды

Получите игровой код Bathroom Tower Defense Roblox и обменяйте его на потрясающие награды. Они помогут вам улучшить или разблокировать башни с более высоким уроном.

Конструкция, обозначения и принципы работы трансформаторов

Конструкция, обозначения и принципы работы трансформаторов

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

4 способа, которыми ИИ делает умные телевизоры лучше

4 способа, которыми ИИ делает умные телевизоры лучше

От лучшего качества изображения и звука до голосового управления и многого другого — эти функции на базе искусственного интеллекта делают смарт-телевизоры намного лучше!

Почему ChatGPT лучше DeepSeek

Почему ChatGPT лучше DeepSeek

Поначалу люди возлагали большие надежды на DeepSeek. Как ИИ-чат-бот, позиционируемый как серьезный конкурент ChatGPT, он обещает интеллектуальные возможности и возможности чата.

Встречайте Fireflies.ai: бесплатный секретарь на базе искусственного интеллекта, который сэкономит вам часы работы

Встречайте Fireflies.ai: бесплатный секретарь на базе искусственного интеллекта, который сэкономит вам часы работы

Легко упустить важные детали, записывая другие важные вещи, а попытки делать заметки во время общения могут отвлекать. Решение — Fireflies.ai.

Как вырастить Аксолотля Майнкрафт, приручить Саламандру Майнкрафт

Как вырастить Аксолотля Майнкрафт, приручить Саламандру Майнкрафт

Аксолот в Minecraft станет отличным помощником для игроков при действиях под водой, если они знают, как им пользоваться.

A Quiet Place: The Road Ahead Конфигурация игры для ПК

A Quiet Place: The Road Ahead Конфигурация игры для ПК

Конфигурация A Quiet Place: The Road Ahead имеет довольно высокий рейтинг, поэтому вам нужно будет рассмотреть ее перед принятием решения о загрузке.