~~~
求助 下面的代码是基于 数据输出渲染到HTML的
现在就是这个分页不太理解 在论坛找到个帖子分页的 不知道如何合并下面代码 测试了好久没有搞定
希望好心人能帮忙下 万分安歇
https://studygolang.com/articles/5689
~~~
main.go
~~~
package main
import (
"net/http"
"database/sql"
_ "github.com/go-sql-driver/mysql" // 包与你的不一样
"log"
"html/template"
)
func main() {
http.HandleFunc("/", table)
http.ListenAndServe(":8080", nil)
}
// 定义查询的数据结构体
type User struct {
Id int64
Name string
Age int
Addr string
}
// table
// 展示列表
func table(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
// 连接数据库
db, err := sql.Open("mysql", "root:root@/test?charset=utf8")
if err != nil {
log.Fatal(err)
return
}
// 查询所有内容
sql := "SELECT id, name, age, addr FROM test"
rows, err := db.Query(sql)
if err != nil {
log.Fatal(err)
return
}
// 切片数据
data := make([]*User, 0)
for rows.Next() {
// 创建一个结构体 类似model
user := &User{}
// 将数据分别扫描进去
if err := rows.Scan(&user.Id, &user.Name, &user.Age, &user.Addr); err != nil {
log.Fatal(err)
return
}
// fmt.Println(user)
// 将结果插入切片中
data = append(data, user)
}
//fmt.Println(data)
// 传递到模板中
// 如果确认自己的路径正确的前提下,出现没有找到指定的模板文件的时候
// 记得在命令行执行 go run main.go
tpl, err := template.ParseFiles("view/index.html")
if err != nil {
log.Fatal(err)
return
}
tpl.Execute(w, data)
}
~~~
index.html
~~~
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Table</title>
<!-- 引入bootstrap -->
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
<style>
.main {
margin: 50px 0;
}
.table {
border: 1px solid #e8e8e8;
}
</style>
</head>
<body>
<div class="row main">
<div class="col-sm-offset-3 col-sm-6">
<table class="table">
<thead>
<tr>
<th>序号</th>
<th>ID</th>
<th>名称</th>
<th>年龄</th>
<th>地址</th>
</tr>
</thead>
<tbody>
<!-- 遍历 这个.就代表了那个data -->
{{range $k, $v := .}}
<tr>
<!-- 这里的k 还有点瑕疵 + 1失败了 -->
<th scope="row">{{$k}}</th>
<td>{{$v.Id}}</td>
<td>{{$v.Name}}</td>
<td>{{$v.Age}}</td>
<td>@{{$v.Addr}}</td>
</tr>
{{end}}
</tbody>
</table>
</div>
</div>
</body>
</html>
~~~
SQL
~~~
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` tinyint(3) unsigned NOT NULL,
`addr` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
INSERT INTO `test` (`id`, `name`, `age`, `addr`) VALUES
(1, '张三', 22, '北京市朝阳区'),
(2, '李四', 25, '天津市滨海新区');
~~~
```
type User_list struct {
Uid int
Email string
Password string
Tel string
Regip string
}
type Paginator struct {
Totalpages int
Currpage int
Firstpage int
Pages []int
Lastpage int
}
type DataTest struct {
Content []*User_list
Paginator *Paginator
Totals int
}
user_list := make([]*User_list, 0)
// range
user := &User_list{}
//&user.Uid, &user.Email, &user.Password, &user.Tel, &user.Regip
if err2 := rows.Scan(&user.Uid, &user.Email, &user.Password, &user.Tel, &user.Regip); err2 != nil {
checkerrlog.CheckErrLog("遍历错误", err2)
return
}
user_list.push(user)
// range end
data := &DataTest{}
data.Content = user_list
```
#14
更多评论
你在查DB的时候加上 offset 和 limit 参数。
然后前端给你传 page , page就是你的 offset, limit 可以自己决定展示多少个。
#1
<a href="/user/momaek" title="@momaek">@momaek</a>
~~~
上面代码返回出去的是
// 切片数据
data := make([]*User, 0)
但是下面帖子
https://studygolang.com/articles/5689
返回的是MAP
这里我纳闷 不懂如何一起丢出去到HTML
希望帮帮忙 帮改改,,我测试一天了, 实在搞不定才上论坛求助的
~~~
#2