消息关闭
    暂无新消息!

golang beego求解答

问题作者 : 皓仔2017-06-16发布

最近入手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:[[]]会多了一层[]?以上代码哪里导致的呢?求大神解答?


1个回答