Golang Revel:对结构数组进行分页

我有一个结构数组,我需要在视图端进行分页。


这是我的代码在视图中的样子:


<div class="tab-content">

        <div class="tab-pane active" id="tab1" >

          <hr/>

          {{range .c}}                

            <p>Number: {{.Number}}</p>

            <p>Name: {{.Name}}</p>

            <p>Parties: {{.A}} and {{.B}}</p>

            <p>Location: {{.Location}}</p>

          <a href="/search">Read More</a>

          <hr/>

          {{end}}

          <div class="paging">

            <ul class="pagination">

              <li><a href="#"><i class="fa fa-angle-left"></i></a></li>

              <li class="active"><a href="#">1</a></li>

              <li><a href="#">2</a></li>

              <li><a href="#">3</a></li>

              <li><a href="#">4</a></li>

              <li><a href="#">5</a></li>

              <li><a href="#"><i class="fa fa-angle-right"></i></a></li>

            </ul>

          </div>

        </div>

我试图寻找解决方案来分页,因为结果有数百个。到目前为止,我遇到的唯一 golang 解决方案与 SQL 相关。我非常感谢结构数组的解决方案。


先感谢您。


编辑我的后端存储是 BoltDB。我通过调用此方法获取控制器上的数据


func List(bucket string)  []Data{

    //Open BoltDB database

    Open()

    defer Close()

    //Use a predefined struct to make an array

    d:=make([]Data, 0)

    //Fetch and unmarshal data as it is saved in byte form

    db.View(func(tx *bolt.Tx) error {

        cur := tx.Bucket([]byte(bucket)).Cursor()

        for k, v := cur.First(); k != nil; k, v = cur.Next() {            

            d1:=Data{}

            err:= json.Unmarshal(v, &d1)

            if err !=nil{

                return err

            }

            d=append(d, d1)

        } 

        return nil  

    })

    //Return the array of data

    return d

}

这个数组是我想在视图上迭代的。


达令说
浏览 306回答 1
1回答

慕婉清6462132

您可以收集从 list 函数返回的完整数据数组。func paginate(x []Data, skip int, size int) []int {limit := func() int {&nbsp; &nbsp; if skip+size > len(x) {&nbsp; &nbsp; &nbsp; &nbsp; return len(x)&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; return skip + size&nbsp; &nbsp; }}start := func() int {&nbsp; &nbsp; if skip > len(x) {&nbsp; &nbsp; &nbsp; &nbsp; return len(x)&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; return skip&nbsp; &nbsp; }}&nbsp; return x[start():limit()]}虽然你会得到你想要的行为,但这在内存方面是非常浪费的,特别是如果你的数据数组很大。希望这可以帮助。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go