以前学PHP,有处理数据强大的数组类型,然,go是的数组是不能用字符串作键值的。但go 有强大的struct 结构,处理起来依然方便。下面来代码:
关于orm处理数据方法参考:在beego开发中使用orm执行原生的sql语句详解_go成长之路-CSDN博客
models.go文件如下:
package models
import (
"github.com/astaxie/beego/orm"
)
type User struct {
Id int `json:"id" `
Name string `json:"name,omitempty" orm:"size(50)"`
//Profile []*Profile `json:"profile" orm:"reverse(many)"` // OneToOne relation
}
//type Profile struct {
// Id int `json:"id" `
// Age int `json:"age" `
// User *User `orm:"rel(fk);index""` // 设置反向关系(可选)
//}
func init() {
// 需要在 init 中注册定义的 model
orm.RegisterModel(new(User))
//orm.RegisterModel(new(User), new(Profile))
}
用struct生成JSON数据的controller.go代码如下:
package controllers
import (
"fmt"
"quickstart/models"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
"strconv"
"math/rand"
)
type IndexController struct {
beego.Controller
}
type Res struct {
Code int
Data []models.User
}
func (c *IndexController) Dbtest() {
//测试原生SQL执行的方法
var type1 = c.GetString("type")
orm1 := orm.NewOrm()
多行数据映射到结构体贪杯
fmt.Println(type1)
var users = []models.User{}
n,err := orm1.Raw("select * from user where id > ?","2").QueryRows(&users)
if err != nil && n > 0 {
for _,v := range users {
c.Ctx.WriteString(strconv.Itoa(v.Id) + " " + v.Name + "\n")
}
return
}
res := Res{}
res.Code = 200
res.Data = users
c.Data["json"] = res
c.ServeJSON()
}
func init() {
// 注册驱动
orm.RegisterDriver("mysql", orm.DRMySQL)
// 注册默认数据库
// 我的mysql的root用户密码为tom,打算把数据表建立在名为test数据库里
// 备注:此处第一个参数必须设置为“default”(因为我现在只有一个数据库),否则编译报错说:必须有一个注册DB的别名为 default
orm.RegisterDataBase("default", "mysql", "root:root@tcp(127.0.0.1:3306)/godb?charset=utf8")
}
访问生成的json数据:
{
"Code": 200,
"Data": [
{
"id": 3,
"name": "tom3"
},
{
"id": 4,
"name": "tom4"
},
{
"id": 5,
"name": "tom5"
}
]
}