DevGang
Авторизоваться

Как присоединить функцию к структуре в Golang

Если вы перешли из других языков, таких как php, C#, Dart и т. д., то вам будет знакомо создание методов для классов. Обычно эти методы реализуют одно действие для данного класса. В таких языках ООП вы создаете такие методы в области видимости класса, например:

class ClassName{
....
 function functionName(){
  // perform action
}
}

В go вы сначала создаете структуру, а затем можете подключить приемники для выполнения определенных действий для этой структуры. Например, у нас есть модель User, к которой мы хотим подключить метод, возвращающий полное имя пользователя, как показано ниже:

type myUser struct{
 FirstName string
LastName string
PostalCode string
DateOfBirth time.Time
}

Выше мы только что создали тип User с различными атрибутами, такими как FirstName, LastName... Мы хотим иметь метод, который выполняет некоторые специальные действия для типа myUser, в данном случае просто возвращает полное имя из указанных атрибутов FirstName, LastName.

Мы можем создать функцию-приемник fullname, которая возвращает строку.

func (user *myUser) fullname() (string, string){
   return user.FirstName ,user.LastName
}

Как мы можем это использовать? Мы можем протестировать это прямо в функции main, чтобы посмотреть, как это работает:

func main() {

    user := myUser{
        FirstName: "Felix",
        LastName:  "chi",
    }
    fmt.Println(user.fullname())

}

Таким образом, мы успешно создали метод-приемник для нашей структуры myUser. Полная версия будет выглядеть следующим образом:

package main

import (
    "fmt"
    "time"
)

type myUser struct {
    FirstName   string
    LastName    string
    PostalCode  string
    DateOfBirth time.Time
}

func (user *myUser) fullname() (string, string) {
    return user.FirstName, user.LastName
}

func main() {

    user := myUser{
        FirstName: "Felix",
        LastName:  "chi",
    }
    fmt.Println(user.fullname())

}

Что дальше? Вставьте код на https://go.dev/play/, чтобы увидеть, как он работает на самом деле. До встречи в моем следующем посте!

Источник:

#Golang
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу