Maison >développement back-end >Golang >Comment avoir une fonction d'interface qui a des paramètres d'entrée d'interface et une valeur de retour du même type ?

Comment avoir une fonction d'interface qui a des paramètres d'entrée d'interface et une valeur de retour du même type ?

王林
王林avant
2024-02-05 23:48:07611parcourir

Comment avoir une fonction dinterface qui a des paramètres dentrée dinterface et une valeur de retour du même type ?

Contenu de la question

J'essaie d'implémenter une fonction dans mon package utilitaire qui paginera tout type de tranche donnée. Il doit accepter une partie de l'interface ainsi que la page et la taille de la page, et doit renvoyer le même type d'interface.

Cependant, lorsque j'essaie d'utiliser la fonction, j'obtiens une erreur : Ma saisie est différente de 接口{}Entrez

cannot use result (variable of type []entity.something) as []interface{} value in argument to utility.paginateslice compilerincompatibleassign

Voici ma fonction :

// paginatelist, paginates a slice based upon its page and pagesize.
func paginateslice(x []interface{}, page, pagesize int) []interface{} {
    var maxsize int = len(x)

    start := (page - 1) * pagesize
    end := start + pagesize - 1

    if start > maxsize || page < 1 || pagesize < 1 {
        start = 0
        end = 0
    } else if end > maxsize {
        end = maxsize
    }

    return x[start:end]
}

Voici un exemple de moi essayant de l'utiliser qui a abouti à un échec :

var result []entity.Something

tmps := utility.PaginateSlice(dataOfSomethingType, pagination.Page, pagination.PageSize)
for _, tmp := range tmps {
    if value, ok := tmp.(entity.Something); ok {
    result = append(result, value)
}

Bonne réponse


utiliseparamètres de type :

func PaginateSlice[S ~[]T, T any](x S, page, pageSize int) S {
    // insert body of function from question here
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer