golang beego求解答
最近入手beego,关于返回值有个疑问:返回数据我自己包装了一个函数,代码如下:
//返回提示信息
func GetMsg(codeNum int, msg string, data ...interface{}) map[string]interface{} {
if data == nil {
return map[string]interface{}{"code": codeNum, "message": msg}
} else {
return map[string]interface{}{"code": codeNum, "message": msg, "data": data}
}
}
models/article.go
type Article struct {
Id int
Title string
Uri string
Keywords string
Summary string
Content string
Author string
Created int64
Viewnum int
Status int
}
func SearchArticle(arg map[string]string) ([]Article, error) {
o := orm.NewOrm()
var art Article
var sql = "select * from " + art.TableName()
conditions := []string{}
for k, v := range arg {
if k == "title" {
conditions = append(conditions, " title like '%"+v+"%'")
} else {
conditions = append(conditions, k+" = "+"'"+v+"'")
}
}
if len(conditions) > 0 {
sql = sql + " where " + strings.Join(conditions, " and ")
}
var arts []Article
_, err := o.Raw(sql).QueryRows(&arts)
if err == nil {
return arts, nil
} else {
return nil, err
}
}
controllers/article.go
/**搜索文章**/
func (this *ArticleController) QueryArticle() {
args := map[string]string{}
if id, err := this.GetInt("id"); err == nil {
args["id"] = strconv.Itoa(id)
}
title := this.GetString("title")
if title != "" {
args["title"] = title
}
fmt.Println(args)
articles, err := m.SearchArticle(args)
fmt.Println(articles)
if err == nil {
this.Data["json"] = GetMsg(1, "获取成功", articles)
} else {
this.Data["json"] = GetMsg(0, "获取失败")
}
this.ServeJSON()
}
返回结果:
{
"code": 1,
"data": [
[
{
"Id": 8,
"Title": "Golang 简单理解Channel",
"Uri": "测试demo",
"Keywords": "golang",
"Summary": "这是一个测试",
"Content": "channel是Go语言在语言级别提供的goroutine间的通信方式。我们可以使用channel在两个或 多个goroutine之间传递消息。channel是进程内的通信方式,因此通过channel传递对象的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针等。如果需要跨进程通信,我们建议用 分布式系统的方法来解决,比如使用Socket或者HTTP等通信协议。Go语言对于网络方面也有非常完善的支持。 channel是类型相关的。也就是说,一个channel只能传递一种类型的值,这个类型需要在声明channel时指定。如果对Unix管道有所了解的话,就不难理解channel,可以将其认为是一种类 型安全的管道。",
"Author": "lee",
"Created": 1495878768,
"Viewnum": 1,
"Status": 0
},
{
"Id": 9,
"Title": "Golang 简单理解Channel4",
"Uri": "测试demo",
"Keywords": "golang",
"Summary": "这是一个测试",
"Content": "channel是Go语言在语言级别提供的goroutine间的通信方式。我们可以使用channel在两个或 多个goroutine之间传递消息。channel是进程内的通信方式,因此通过channel传递对象的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针等。如果需要跨进程通信,我们建议用 分布式系统的方法来解决,比如使用Socket或者HTTP等通信协议。Go语言对于网络方面也有非常完善的支持。 channel是类型相关的。也就是说,一个channel只能传递一种类型的值,这个类型需要在声明channel时指定。如果对Unix管道有所了解的话,就不难理解channel,可以将其认为是一种类 型安全的管道。",
"Author": "lee",
"Created": 1495878774,
"Viewnum": 1,
"Status": 0
},
{
"Id": 10,
"Title": "Golang 简单理解Channel5",
"Uri": "测试demo",
"Keywords": "golang",
"Summary": "这是一个测试",
"Content": "channel是Go语言在语言级别提供的goroutine间的通信方式。我们可以使用channel在两个或 多个goroutine之间传递消息。channel是进程内的通信方式,因此通过channel传递对象的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针等。如果需要跨进程通信,我们建议用 分布式系统的方法来解决,比如使用Socket或者HTTP等通信协议。Go语言对于网络方面也有非常完善的支持。 channel是类型相关的。也就是说,一个channel只能传递一种类型的值,这个类型需要在声明channel时指定。如果对Unix管道有所了解的话,就不难理解channel,可以将其认为是一种类 型安全的管道。",
"Author": "lee",
"Created": 1495878776,
"Viewnum": 1,
"Status": 0
}
]
],
"message": "获取成功"
}
我想问的就是,为啥返回结果里面data:[[]]会多了一层[]?以上代码哪里导致的呢?求大神解答?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这里的data应该是slice