Параметры функции до её названия golang

Изучаю GO, наткнулся на такую функцию в одном из проектов:

// BeforeCreate ...
func (u *User) BeforeCreate() error {
    if len(u.Password) > 0 {
        enc, err := encryptedString(u.Password)
        if err != nil {
            return err
        }

        u.EncryptedPassword = enc
    }

    return nil
}

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


Ответы (1 шт):

Автор решения: Serenity sun

(u *User) означает что метод принимает ссылку структуры и применяет операции только к этой структуре. То есть метод создан для работы со структурой User. Простыми словами мы сказали методу что он будет работать только с структурой User. Пример:

//я структура
type User struct {
    Name string
}

//я приму только структуру User
func (u * User) setName() {
    u.Name = "Serenity"
}

func main() {
var user = User{"sun"}

//обращаемся методу прямо из структуры
//для этого и используется (u * User)
user.setName()

//вывод: Serenity
}
→ Ссылка