Если вы хотите работать с Params
(или *Params
), вы должны это сделать.
Если вы хотите работать с непрозрачным типом, скрытым за interface{}
, вы должны сделатьчто.
Короче говоря, вы не можете заглянуть за занавес, не заглядывая за занавес. Либо предоставьте действительный тип Params
, чтобы вы могли посмотреть на него, либо оставьте весь код, который просматривает его в другом месте. «Храните код в другом месте» - это то, где interface
действительно сияет, потому что это позволяет вам объявить, что что-то непрозрачное в противном случае имеет поведения и попросить, чтобы это поведение произошло:
type Titler interface {
GetTitle() string
}
Если Params
имеет функцию GetTitle
, она становится Titler
.
Теперь вы можете определить CreateTodo
как функцию, которая принимает Titler
, а затем вы можете передать &data
к этой функции.
Эта структура в целом довольно громоздкая, и представляется гораздо более вероятным, что вместо нее Todo
должна быть встраиваемой структурой, но посмотрите более полный пример, начиная с урезанной версии вашегоПример кода здесь, на игровой площадке Go .