学习资料

GO

传送门

GO语言圣经:传送门

mysql

b站视频:传送门

gorm:传送门

gorm连接数据库:

db, err := gorm.Open("mysql", "username:password@tcp(ip:port)/databasename?charset=utf8mb4&parseTime=True&loc=Local")//tcp可以用其他协议来代替,port一般为3306

查询最大值:

rows, err := db.Table("score").Select("MAX(degree)").Rows()
if err != nil {
   fmt.Println("查询最大值错误")
   return
}
var mx float64
if rows.Next() {
   err := rows.Scan(&mx)
   if err != nil {
      fmt.Println("错误")
      return
   }
}

查询从第x行(从0开始)开始的n个人:

var score []Score
db.Order("degree desc").Offset(x).Limit(n).Find(&score)

查询平均值:

var avgs [5]float64
i := 0
rows, err := db.Table("score").Group("cno").Select("AVG(degree)").Rows()
for rows.Next() {
   rows.Scan(&(avgs[i]))
   fmt.Println(avgs[i])
   i++
}

多表查询:

//用一个新的struct来存储答案,借助join连接来实现多表查询,下面的例子是三表查询
type Result struct {
   Sname string `gorm:"column:sname"`
   Cname string `gorm:"column:cname"`
   Degree string `gorm:"column:degree"`
}

var result []Result
db.Table("student").Select("sname, cname, degree").Joins("JOIN score on student.sno = score.sno").Joins("JOIN course on course.cno = score.cno").Scan(&result)

redis

学习链接:redisdoc.com

go-redis教程:https://www.tizi365.com/archives/290.html

DEL key //删除key,返回被删除数的数量
DUMP key //序列化key,并返回序列化的值
EXISTS key //检查是否存在key,存在返回1否则返回0
EXPIRE key secod //给key增加过期时间,可以s为单位,成功返回1,否则返回0
KEYS pattern //查找符合模式的key,?匹配一个字符,*匹配多个字符
MOVE key db //将当前数据库的key移动到给定数据库,成功1失败0
PERSIST key //移除key的过期时间,成功1失败0
TTL key //以秒为单位返回key的剩余过期时间,key不存在-2,存在没有设置过期时间-1
RANDOMKEY //从当前数据库随机返回一个key,数据库为空返回nil
RENAME key newkey //修改key的名字,成功返回ok否则返回一个错误,注意如果newkey存在则发生覆盖
RENAMENX key newkey //仅当newkey不存在时进行修改,修改成功1,如果newkey存在返回0
TYPE key //返回key的类型

字符串

SET key val [EX seconds][PX milliseconds][NX|XX] //设置key的值为val(如果原来有值将会发生覆盖),后面选项依次为以秒为单位的生存时间,以毫秒为单位的生存时间,当key不存在时才操作,当key存在时才操作,操作成功返回ok
GET key //返回key的值,不存在时返回nil,如果key不是字符串则返回错误
GETSET key val //返回key的旧值,设置新值,其他返回值与GET相同
STRLEN key //返回key的长度,不存在返回0,非字符串返回错误
APPEND key val //在key后面添加val,返回添加完之后key的长度
SETRANGE key offset val //将key的[offset,offset+len(val)-1]处的字符用val来代替,如果key的长度不足offset则缺少部分用空字符填充,返回key的长度
GETRANGE key start end //返回key的[start,end]部分的子串,负数参数(假设为-x)表示倒数第x个字符,注意start对应的字符必须在end之前否则返回空字符
INCR key //将key对应的值加一,如果key不存在则先初始化为0再加一,返回加一后的值,如果key不能被解释成整数则返回错误
INCRBY key val //将key的值增加val,其他的与INCR相同
INCRBYFLOAT key val //同上,操作对象为浮点数
//decr,decrby与对应的in-相同,注意没有decrbyfloat
MSET key val[key val...] //同时设置多值,如果key存在则进行覆盖,为原子操作,总是返回ok
MSETNX key val[key val...] //同时设置多值,如果key存在失败,为原子操作同时成功或同时失败,成功返回1失败返回0
MGET key[key...] //同时返回多个值,某个key不存在则返回值中对应位置用nil代替

哈希表

HSET hashtable field val //将哈希表hashtable中的field的值设置为val,哈希表不存在将会进行创建新表,如果field存在则发生覆盖,成功设置field返回1,如果发生覆盖返回0
HSETNX hashtable field val //成功返回1失败0
HGET hashtable field //如果哈希表或者field不存在返回nil
HEXISTS hashtable field //存在1失败0
HDEL hashtable field[field...] //删除哈希表中的field,不存在的将会忽略,返回成功删掉的数量
HLEN hashtable //返回哈希表中域的数量
HSTRLEN hashtable field //返回哈希表中与给定域相关联的字符串的长度
HINCRBY hashtable field val //返回增加后的值
HINCRBYFLOAT hashtable field val //返回增加后的值
HMSET hashtable field val[field val...] //执行成功返回ok,如果hashtable不是哈希表则返回错误
HMGET hashtable field[field...] //返回值,不存在该哈希表或者域则对应位置用nil代替
HKEYS hashtable //返回该哈希表中所有的域,当哈希表不存在时返回一个空表
HVALS hashtable //返回该哈希表中所有域的值,当哈希表不存在时返回一个空表
HGETALL hashtable //返回哈希表中所有的域和值,排列方式:域值域值...

列表

LPUSH key val[val...] //将一系列的值插入到列表的表头,依次插入,返回列表长度,如果key不是列表则返回错误
LPUSHX key val[val....] //当且仅当key存在且为列表时进行操作,操作同上
//RPUSH、RPUSHX与L-相同
LPOP key //移除并返回表头元素,key不存在返回nil
//RPOP返回表尾元素
RPOPLPUSH key1 key2 //将key1的尾元素返回并把其从key1中移除增加到key2的表头,如果key1不存在返回nil并且不执行接下来的操作,为原子操作
LREM key count val //如果count>0则从左往右移除min(count,num(val))个与val相等的值,count<0从右往左移除,count=0移除所有
LLEN key //返回列表的长度,如果key不是列表则返回错误
LINDEX key index //返回index处的值,注意下标从0开始,如果index>len(key)则返回nil
LINSERT key BEFORE|AFTER pivot val //在pivot之前或之后插入val,成功返回列表长度,如果找不到pivot返回-1,如果key不是列表或不存在(不执行任何操作)返回0
LSET key index val //将key中下标为index的值改为val,如果index超出范围或者key为空返回错误,否则返回ok
LRANGE key start stop //返回[start,min(stop, len(key)]的元素
LTRIM key start stop //移除非[start,min(stop, len(key)]的元素,返回ok
BLPOP key[key...] timeout //阻塞式弹出,返回第一个非空列表的名字和表头,如果超时则返回nil和时间
//RLPOP与BLPOP类似
BRPOPLPUSH为阻塞式的RPOPLPUSH,返回值或nil+时间

集合

SADD key member[member...] //往集合中增加元素,已有元素会被忽略,返回成功插入的元素数量
SISMEMBER key member //判断member是否是key的成员
SPOP key //从集合中随机移除并返回一个元素,如果key不存在或者是空集返回nil
SRANDMEMBER key[count] //从key中随机返回值但不删除,如果没有count则返回一个,count为正数返回min(count,集合基数)个元素,不重复,count为负数返回count的绝对值个数,不保证不重复
SREM key member[member] //移除集合中的member,不存在的将会被忽略,返回成功移除的数量
MOVE key1 key2 member //从key1中移除member并加到key2中,成功返回1否则0
SCARD key //返回集合基数
SMEMBERS key //返回集合中所有的元素
SINTER key[key...] //返回这些集合的交集
SINTERSTORE destination key[key...] //返回交集数量并把交集存到destination中,如果destination存在则覆盖
SUNION key[key...] //返回并集
SUNIONSTORE destination key[key...] //返回并集数量并把并集存到destination中,如果destination存在则覆盖
SDIFF member[member...] //返回第一个集合中的元素,这些元素是其他任何一个集合中都没有的
SDIFFSTORE destination key[key...] //返回数量并将上面这个指令的结果存到destination,如果destination存在则覆盖

Thrift

https://www.cnblogs.com/cyfonly/p/6059374.html

thrift语句与go语句的对应:https://www.jianshu.com/p/6a651a67e65f

消息队列

消息队列:https://zhuanlan.zhihu.com/p/55712984

kafka:https://zhuanlan.zhihu.com/p/37405836

RocketMQ:https://www.jianshu.com/p/824066d70da8

Proto

https://blog.csdn.net/jiaweiok123/article/details/87809831

使用链接

json转go
json解析并格式化
unicode转中文
流程图

posted @ 2020-06-02 20:33  Dillonh  阅读(149)  评论(0编辑  收藏  举报