连接集群

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
所以集群的话格式是

GlobalMgoSession, err := mgo.Dial("mongodb://username:pwd@host1:port,host2:port")

如果不需要auth,则可以是

GlobalMgoSession, err := mgo.Dial("host1:port,host2:port")

生成objectid

i := bson.NewObjectId()
c.Insert(bson.M{"_id": i, "foo": "bar"})

golang 使用 mongo gte lte 功能

searchErr = SearchReading(bson.M{"k": key, "t": bson.M{"$gte": start, "$lte": end}}, limit)
不能直接写
searchErr = SearchReading(bson.M{"k": key, "t":'{"$gte": start, "$lte": end}'}, limit)

基础小工具

go语言的int转换成string有3种方法

1、int32位,strconv.Itoa
2、大于32位,strconv.FormatInt(int,进制(10))
3、万恶的fmt.Sprintf.

golang md5 计算

func genQueryMd5(str string) string {

hash := md5.New()

b := []byte(str)

hash.Write(b)

hash.Sum(nil)

return fmt.Sprintf("%x", md5.Sum(b))

}

  1. When you call Sum(nil) it returns d.checkSum() directly as a byte slice, however if you call Sum([]byte) it appends d.checkSum() to your input.
  2. Write函数会把MD5对象内部的字符串clear掉,然后把其参数作为新的内部字符串。而Sum函数则是先计算出内部字符串的MD5值,而后把输入参数附加到内部字符串后面。即可以为认为:hash.Write(b) + hash.Sum(nil) = hash.Write(nil) + hash.Sum(b) + hash.Sum(nil) = md5.Sum(b)。

解析字符串为 int64
func ParseInt(s string, base int, bitSize int) (i int64, err error)

参数1 数字的字符串形式

参数2 数字字符串的进制 比如二进制 八进制 十进制 十六进制

参数3 返回结果的bit大小 也就是int8 int16 int32 int64

import

(
"strconv"
)
i, err := strconv.ParseInt("123", 10, 32)

时间戳互换
获取时间戳用time.Now().Unix(),格式化时间用t.Format,解析时间用time.Parse
timestamp := time.Now().Unix()
//格式化为字符串,tm为Time类型

tm := time.Unix(timestamp, 0)

fmt.Println(tm.Format("2006-01-02 03:04:05"))
//从字符串转为时间戳,第一个参数是格式,第二个是要转换的时间字符串

tm2, _ := time.Parse("01/02/2006", "02/08/2015")

golang  byte 转string

golang里边 string的概念其实不是以前遇到/0结尾的概念了,他其实就是一块连续的内存,首地址+长度,上面那样赋值,如果p里边有/0,他不会做处理这个时候,如果再对这个string做其他处理就可能出问题了,比如strconv.Atoi转成int就有错误,解决办法就是需要自己写一个正规的转换函数:

func byteString(p []byte) string {

for i := 0; i < len(p); i++ {

   if p[i] == 0 {

      return string(p[0:i])

  }

}

return string(p)

}

golang  Polymorphism的支持。interface对多态的支持还是比较有限。down casting做不了有的时候还是不大方便。用父类做方法参数,传递子类则会编译失败,无法做通用类

golang使用 mongo的更多相关文章

  1. golang mgo的mongo连接池设置:必须手动加上maxPoolSize

    本司礼物系统使用了golang的 mongo库 mgo,中间踩了一些坑,总结下避免大家再踩坑 golang的mgo库说明里是说明了开启连接复用的,但观察实验发现,这并没有根本实现连接的控制,连接复用仅 ...

  2. golang:mgo剖析之Session

    golang操作mongo使用的包是"gopkg.in/mgo.v2",coding过程中需要并发读写mongo数据库,简单观摩了下源码,记录下自己的一些理解,如有错误,敬请斧正. ...

  3. 【Gin-API系列】配置文件和数据库操作(三)

    我们前面已经实现了API的基础版本,能对参数校验和返回指定数据,这一章,我们将对主机和交换机进行建模,存入数据库. 考虑到数据库安装和使用的简便性,我们采用文档存储结构的MongoDB数据库. Mon ...

  4. Golang 中操作 Mongo Update 的方法

    Golang 和 MongoDB 中的 ISODate 时间交互问题 2018年02月27日 11:28:43 独一无二的小个性 阅读数:357 标签: GolangMongoDB时间交互时间转换 更 ...

  5. Golang+Mongodb

    Golang+Mongodb打造你的第一个站点 很多人推荐MEAN来开发站点.MEAN就是M:mongodb,E:expressjs.A:angular最后的N:nodejs. 但是如果你亲身的体会到 ...

  6. golang 之 bson 与 struct 转换

    bson的介绍不说了golang下的解析包找到2个 一个是mongo的http://labix.org/gobson,另外一个比较小众https://github.com/sbunce/bson这里用 ...

  7. 图数据库cayley+mongo的起航之旅

    图数据库,目前比较主流的可能是Neo4j以及cayley了.但是,由于Neo4j只有社区版是免费的,所以,选择cayley作为项目的最终选择! 今天就简单的介绍下,我的起航之旅. 1.安装go语言环境 ...

  8. 使用Golang+Mongodb打造你的第一个站点

    很多人推荐MEAN来开发站点.MEAN就是M:mongodb,E:expressjs.A:angular最后的N:nodejs. 但是如果你亲身的体会到了js的嵌套回调的话你就会想换换别的办法了.虽然 ...

  9. mongo源码学习(三)请求接收传输层

    在上一篇博客中(mongo源码学习(二)db.cpp之mongoDbMain方法分析),我们把db.cpp中的mongoDbMain的执行过程分析了一下,最后会调用initAndListen(serv ...

随机推荐

  1. cocos IDE 编译lua 游戏程序的环境配置

    因为毕业设计需要用cocosIDE编译一个apk在手机上跑,所以搭建这个环境还是需要的. ps:是针对win系统的. 需要的工具: 1.cocosIDE:点击链接 (ps:据说这个软件设计有点反人类, ...

  2. Sprite(精灵)&& 三个特殊的层Layer

    用来作为以后复习使用. 1 #include "ScenceScend.h" CCScene* ScenceScend::scene() { CCScene* s = CCScen ...

  3. Codeforces 722C. Destroying Array

    C. Destroying Array time limit per test 1 second memory limit per test 256 megabytes input standard ...

  4. php : 基础(1)

    php基本语法形式 1.php的标记符 有以下形式: 形式1(推荐): <?php 这里要写符合php语法的语句 ?> 形式2: <script language="php ...

  5. 一、Hello World

    刚创建的Android项目是一个基础的Hello World项目,包含一些默认文件,我们需要花一点时间看看最重要的部分: activity_main.xml  -- 这是刚才用Android Stud ...

  6. 不完全解决Android微信HTML5 播放视频的问题(不显示控制条,可交互)

    首先你需要知道以下内容: http://ad.weixin.qq.com/learn/2-3-3--%E9%80%9A%E7%94%A8%E5%BA%93 这是微信为广告商开放的API,我一直认为只有 ...

  7. Treap

    treap模板 期望复杂度为O(nlogn) 带合并的treap期望复杂度为O(nlognlogn) #include <bits/stdc++.h> ; struct tree{ int ...

  8. SublimeText配置NodeJS代码提示

    IDE选择 最近开始研究node.js.在网上资料显示使用WebStorm开发好像是最理想的选择,但由于其需要收费.笔者选择使用Sublime Text开发.至于破解方法网络有一大堆资料,笔者此处就略 ...

  9. iOS中iconfont(图标字体)的基本使用

    前言 近日在做项目时,项目组有提出iconfont的技术,便开始查询相关资料.iconfont技术的主要目的是为减少应用体积而生.首先icon代表图标 font代表字体.此技术便是将图标转化为字体,从 ...

  10. Android UiAutomator快速调试

    在测试类中添加主函数 public static void main(String[] args){ String jarName,testClass, testName,androidId; jar ...