Как присоединить функцию к структуре в 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/, чтобы увидеть, как он работает на самом деле. До встречи в моем следующем посте!