首頁 > 後端開發 > Golang > 主體

如何擁有一個具有介面輸入參數和相同類型返回值的介面的函數?

王林
發布: 2024-02-05 23:48:07
轉載
590 人瀏覽過

如何擁有一個具有介面輸入參數和相同類型返回值的介面的函數?

問題內容

我正在嘗試在我的實用程式包中實作一個函數,用於對給定的任何類型的切片進行分頁。它應該接受一部分介面加上頁面和頁面大小,並且必須傳回相同類型的介面。

但是,當我嘗試使用該函數時,出現錯誤:我的輸入與 介面{}輸入

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

這是我的功能:

// 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]
}
登入後複製

這是我嘗試使用它導致失敗的一個例子:

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)
}
登入後複製


正確答案


使用類型參數

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

以上是如何擁有一個具有介面輸入參數和相同類型返回值的介面的函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板