Судя по методам интерфейса Storage нужен для того, чтобы эта библиотека имела возможность сохранять в вашу базу данные подписки/оплаты.
Можете начать с того, что сделаете пустую реализацию, посмотрите какие параметры вам будут приходить/какие будут нужны и там уже разберётесь как вам удобнее сохранить данные.
Допустим вы будете хранить данные в MySQL... тогда реализация может выглядеть вот так
type MySQLStorage struct {
db *sql.DB
}
func NewMySQLStorage(db *sql.DB) *MySQLStorage {
return &MySQLStorage{
db: db,
}
}
func (sg *MySQLStorage) StorePurchases(ctx context.Context, sp []*Purchase) ([]*Purchase, error) {
for _, p := range sp {
fmt.Printf("%+v\n", p)
}
return sp, nil
}
func (sg *MySQLStorage) StoreSubscriptionPurchases(ctx context.Context, sp []*SubscriptionPurchase) ([]*SubscriptionPurchase, error) {
for _, p := range sp {
fmt.Printf("%+v\n", p)
}
return sp, nil
}
т.е. вызов может быть таким
db := connectToDB...
sg := NewMySQLStorage(db)
NewValidate(sg "", googleConfig)