重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
arshal函数只有在转换成功的时候才会返回数据,在转换的过程中我们需要注意几点:
成都创新互联是专业的网站建设公司,提供网站建设,网站制作,网站设计等网站开发一体化解决方案;包括H5开发,微信小程序定制开发,网站定制,企业网站建设,商城网站开发,响应式网站开发,建网站,PHP网站建设,软件开发,软文发布平台,网站营销。欢迎做网站的企业前来合作洽谈,成都创新互联将竭诚为您服务!
JSON对象只支持string作为key,所以要编码一个map,那么必须是map[string]T这种类型(T是Go语言中任意的类型)
Channel, complex和function是不能被编码成JSON的
嵌套的数据是不能编码的,不然会让JSON编码进入死循环
指针在编码的时候会输出指针指向的内容,而空指针会输出null
package main
import (
"fmt"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
type DB struct {
Session *mgo.Session
Collection *mgo.Collection
}
type Digapp struct {
App_id string
Fetch_url string
From string //
Fetch_state bool
Fetch_priority int32 //
Create_time int64 //
Invalid bool // + app is access now ?
}
func main() {
db := new(DB)
if err := db.DBInit(); err != nil {
fmt.Println("初始化数据库失败!错误为:" + err.Error())
return
}
defer db.Close()
var digapp Digapp
//selector := bson.M{"fetch_priority": 5, "invalid": false}
//selector := bson.M{"fetch_priority": 5, "from": bson.M{"$ne": "dig"}, "invalid": false}
selector := bson.M{"from": "KeywordsSearch"}
db.SetCollection("digapp")
iter := db.GetIter(nil, selector)
for iter.Next(digapp) {
fmt.Println(digapp)
}
}
func (db *DB) DBInit() error {
var err error
db.Session, err = mgo.DialWithInfo(mgo.DialInfo{Addrs: []string{MongoDBUrl}, Username: Username, Password: Password})
if err == nil {
db.Session.SetSafe(mgo.Safe{WMode: WMode})
}
return err
}
func (db *DB) Close() {
db.Session.Close()
}
func (db *DB) SetCollection(collection string) {
db.Collection = db.Session.DB(MongoDBName).C(collection)
}
func (db *DB) GetIter(condition interface{}, selector bson.M, sortor ...string) *mgo.Iter {
return db.Collection.Find(condition).Select(selector).Iter()
}
当使用selector := bson.M{"fetch_priority": 5, "invalid": false}时,输出的是正确抓取到的值;
当使用selector := bson.M{"fetch_priority": 5, "from": bson.M{"$ne": "dig"}, "invalid": false}时,什么都抓不到(没有任何输出信息);
当使用selector := bson.M{"from": "KeywordsSearch"}时,输出的是{ KeywordsSearch false 0 0 false}。
真是奇哉怪也.搞了一早上搞得头大也没弄清楚到底是什么状况。
连接池会很快达到限制值,查询操作会越来越慢等。MGO是Go语言操作monggodb数据库的一个驱动,在高并发下存在的问题有连接池会很快达到限制值,查询操作会越来越慢等。MGO封装了基于Go语法的API。