дело в том:
если у вас есть такая функция, как
func A(param interface{}) {}
вы можете передать что угодно параметру при вызове функции A. как
A(10)
A(true)
A(nil)
Потому что интерфейс {} означает все. Итак, ваше определение функции func:
type GetProfileHandlerFunc func(GetProfileParams, interface{}) middleware.Responder
означает функцию GetProfileHandlerFunc, которая принимает два параметра, первый имеет тип GetProfileParams, второй имеет тип интерфейса {}. Это означает, что второй параметр может быть чем угодно.
Но
func(params profile.GetProfileParams, principal *models.User) middleware.Responder
означает функцию, которая принимает два параметра, первый тип GetProfileParams, второй тип * models.User. Итак, вы думаете, что они одинаковы? №
Мне нужна функция, которая может принимать что угодно в качестве второго параметра, а не функцию, которая может принимать только пользователя в качестве второй функции.
Когда вы звоните на свою ручку
GetProfileHandlerFunc(params, 10) // this is ok
Так это нормально для
func(params profile.GetProfileParams, principal *models.User) middleware.Responder
номер
Правильный способ сделать это:
api.ProfileGetProfileHandler = profile.GetProfileHandlerFunc(func(params profile.GetProfileParams, principal interface) middleware.Responder {
user:=principal.(*model.User) // watch this.
}