golang使用 mongo

 连接集群

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做不了有的时候还是不大方便。用父类做方法参数,传递子类则会编译失败,无法做通用类

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

MFC常用基本数据类型

ATOM                   原子(原子表中的一个字符串的参考)  BOOL   布尔变量  BOOLEAN                布尔...

2116
来自专栏me的随笔

C#字符串的不变性

  看过一些C#教程的人都应该知道这句话:“在C#中,一旦对字符串对象进行初始化,该字符串对象就不能再被该变“。这句话可用简单的图示来说明:

821
来自专栏牛客网

知识总结:Java集合对象排序1.List排序2.Set排序 3.Map排序

1.List排序 这个和数组的排序又不一样了。 其实Java针对数组和List的排序都有实现,对数组而言,你可以直接使用Arrays.sort,对于List和V...

1.1K10
来自专栏鸿的学习笔记

Python的数据结构整理

别名:maps, hashmaps, lookup tables, associative arrays

944
来自专栏Fish

两天了解scala

最前面的话 因为spark的源语言是scala,所以,为了看懂spark的操作并且为了以后看spark源码做准备,先看scala还是很有必要的。另外这里主要是看...

2039
来自专栏mukekeheart的iOS之旅

OC学习6——面相对象的三大特性

我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这也是面向对象的三大特征。OC学习篇之---类的三大特性(封装,继承,多态) 1、封装(Enca...

2898
来自专栏Java 源码分析

Java8新特性

1.HashMap 首先就是对 java 的 HashMap 进行了修改,以前是通过 hashCode 方法来判断他们的地址值是否一样 ,如果相同的话再使用 e...

3634
来自专栏java一日一条

掌握 Java 8 Lambda 表达式

Lambda 表达式 是 Java8 中最重要的功能之一。使用 Lambda 表达式 可以替代只有一个函数的接口实现,告别匿名内部类,代码看起来更简洁易懂。La...

1172
来自专栏玄魂工作室

如何学Python 第十四课 lambda和lambda操作符,另一些列表操作

第十四课 lambda和lambda操作符,另一些列表操作 上节课我们介绍了一些列表的高级使用方法。在本节,我们更进一步,讨论一下lambda和lambda操作...

3384
来自专栏GreenLeaves

JavaScript之JSON

一、简介:Json是JavaScript中读取结构化数据更好的方式。因为Json数据可以直接传给eval(),而且不必创建DOM对象。Json是一种数据格式,不...

2647

扫码关注云+社区

领取腾讯云代金券