![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Go
文章平均质量分 58
何不泛轻舟
这个作者很懒,什么都没留下…
展开
-
go获取内存监控
golang运行时程序分析原创 2023-02-01 16:38:12 · 793 阅读 · 0 评论 -
gorm处理动态结果问题
今天我们使用gorm有某场景需要动态拼接sql语句,获取结果title为动态修改。事情背景:此前我们使用beego开发使用beego自带orm,处理此类问题可定义接收变量为([]orm.Params)例如var maps []orm.Paramsif _, err := o.Raw(sql).Values(&maps);err!=nil { return }现在项目重构使用gin+gorm+redigo+iview结构在处理此...原创 2021-07-13 20:32:36 · 874 阅读 · 0 评论 -
redis哨兵+golang代码测试
前边我们已经完成了redis的主从搭建,这里考虑到容灾的自动切换,如下图:我们利用哨兵(sentinel)来对各节点进行监控【主从配置】首先看一下redis.conf 配置文件中的各个参数,详解如下# redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)。 daemonize no # 指定redis进程的PID文件存放位置 pidfile /var/run/redis.pid # redis进程的端口号 port 6379原创 2021-04-06 14:32:50 · 843 阅读 · 0 评论 -
golang的GC
三色标记:首先所有对象都是白色,1. 从root开始将所有可达对象标记为灰色2. 从灰色集合中取出,将其引用的对象标记为灰色,自己标记为黑色3. 重复上边的操作,直到灰色集合为空4. 标记结束后不可达白色集合即为垃圾,回收白色对象5. 重置GC状态写屏障的意义:三色标记需要维护不变性条件,黑色对象不能引用无法被灰色对象可达的白色对象。并发标记时,如果没有做正确性保障措施,可能会导致漏标记对象,导致实际上可达的对象被清扫掉。为了解决这个问题,go使用了写屏障,写屏障是在写入指针前执.原创 2020-11-25 22:07:56 · 179 阅读 · 0 评论 -
golang知识点
1. golang中安全读写共享变量 通过Channel进行安全读写共享变量 通过Mutex加锁处理 对于Map可以使用sync.Map 针对读多写少情况可以使用sync.RWMutex 2. channel是否同步问题channel无缓冲时,发送阻塞直到数据被接收,接收阻塞直到读取到数据 channel有缓冲时,当缓冲满时发送阻塞,当缓冲空时接收阻塞3. go语言并发机制以及它所使用的CSP并发模型CSP模型是上个世纪七十年代提出的,不同于传统的多线程通原创 2020-11-25 15:05:08 · 457 阅读 · 0 评论 -
redis模拟kafka功能思路分析
分析 :Redis 发布订阅 :publish指令 subscribe指令1. 单发布者生产者极限本机约8w2. 发布者根据chanel发布msg3. 订阅者根据chanel订阅msg4. 如果发布者发布了但没有订阅者正在监听则数据丢失Redis 生产者消费者: LPUSH命令(Producer) BRPOP命令(Consumer)1. 单生产者或者消费者极限本机约8w2. 生产者利用LPUSH命令将msg以key-value形式推入队列中3. 消费者使...原创 2020-11-14 15:01:06 · 597 阅读 · 0 评论 -
golang 锁使用注意事项
运行时离开当前逻辑就释放锁。 锁的粒度越小越好,加锁后尽快释放锁。 尽量不用 defer 释放锁。 读锁不要嵌套。原创 2020-11-14 14:58:03 · 511 阅读 · 0 评论 -
Redis实现分布式锁,及Golang代码展示分析
一、使用分布式锁要满足的几个条件:系统是一个分布式系统 共享资源 同步访问二、应用场景:从redis取值N,对数值进行修改然后将N写回redis中,这种应用场景是很常见的,像秒杀,全场递增ID,IP访问限制等。以IP访问限制来说,而已攻击者可能发起无限次访问,并大量比较大,分布式环境下对N的检测修改就不可靠了,因为从redis读取的N可能已经是脏数据了。传统的加锁做法也没用,因为这是分布式环境,在这种情况下就需要分布式锁出场了。分布式锁可以基于很多种方式实现,比如zookeeper原创 2020-09-09 22:22:51 · 285 阅读 · 0 评论 -
golang中值类型和引用类型
值类型包括:int、float、bool、string、数组、结构体值类型变量声明后,不管是否已经赋值,编译器为其分配内存,此时该值储存于栈上,j=i 时候修改某变量的值不会影响另一个引用类型包括:指针、slice切片、map、chan、interface变量直接存放的就是一个内存地址值,这个地址值指向的空间存的才是值。所以修改器中一个,另外一个也会修改。需要注意的是引用类型必须申请内存才可以使用,make()是给引用类型申请内存空间...原创 2020-08-20 16:12:26 · 212 阅读 · 0 评论 -
Docker下载特别慢怎么办
http://get.daocloud.io/点进去有惊喜原创 2020-08-19 15:35:10 · 231 阅读 · 0 评论 -
golang中的反射
Golang中的反射是通过refect实现的,我们今天就来看看他的使用和注意事项。import "reflect"//reflect包实现了运行时反射,允许程序操作任意类型的对象。//典型用法是用静态类型interface{}保存一个值,通过调用TypeOf获取其动态类型信息,//该函数返回一个Type类型值。调用ValueOf函数返回一个Value类型值,//该值代表运行时的数据。Zero接受一个Type类型参数并返回一个代表该类型零值的Value类型值。 首先我们来查看...原创 2020-08-19 11:33:51 · 795 阅读 · 0 评论 -
常见的排序算法golang实现
常见排序算法包括冒泡、选择、插入、快排、归并、等,其中快排为官方包sort的默认排序方式,那我们先来看一下官方快拍实现方式吧:func quickSort(data Interface, a, b, maxDepth int) { for b-a > 12 { // Use ShellSort for slices <= 12 elements if maxDepth == 0 { heapSort(data, a, b) return } maxDepth--原创 2020-08-17 17:23:57 · 223 阅读 · 0 评论 -
gorm中json时间格式化方法
package modelimport ( "database/sql/driver" "fmt" "time")type TimeNormal struct { // 内嵌方式(推荐) time.Time}func (t TimeNormal) MarshalJSON() ([]byte, error) { // tune := fmt.Sprintf(`"%s"`, t.Format("2006-01-02 15:04:05")) tune := t.Format(`"20.原创 2020-08-10 17:00:41 · 1968 阅读 · 0 评论 -
Go get 因被墙下载gin失败
现在我们的目标是下载gin,首先查阅文档,发现安装及其简单,官方给的文档简洁明了。第一步下载安装:$ go get -u github.com/gin-gonic/gin第二????步导入:import "github.com/gin-gonic/gin"然后我们就来了,咦为什么安装过程中各种404呢。思索一下,被墙了,然后去找国内镜像云。国内镜像云配置方法如下。其中有四个分别是官方/七牛/其他/阿里。这里一看这里有官方啊,那我们用官方。# 启用 Go Modules原创 2020-08-05 17:25:52 · 2759 阅读 · 3 评论 -
Golang的错误捕获及恢复
从Python转golang一直对于golang的try...catch耿耿于怀,因为开始没有找到一篇合理的两种方式对比的文章,在golang官方文档中讲解是用的panic()及recover()两个方法实现的,但是看完后对于这个概念还是很迷糊,我认为这个是对于新手来讲比较挠头的事情,所以在这里为大家简单阐述一下两种方式的对比。方便新来的同学们认识golang的异常捕获机制。 首先我们来看一下Python中的异常捕获,在Python中异常捕获书写方式跟Java及node等常用语言都类似,采...原创 2020-08-05 11:39:09 · 1127 阅读 · 2 评论