go
文章平均质量分 62
lcf枫
shopee 后台开发
展开
-
string rune byte 理解
string rune byte 理解golang 字符串类型是常用的处理字符串的类型。但是如果是判断len,以及使用处理单个字符的时候就需要使用 rune 或者byte 进行处理。string 底层存储数据结构type stringStruct struct { array unsafe.Pointer // 指向一个 [len]byte 的数组 length int // 长度}test := "hello" p := (*str)(unsafe.Poi原创 2020-05-13 11:54:59 · 346 阅读 · 0 评论 -
golang hystrix 熔断器
golang hystrix 熔断器熔断器是为了保护被调方健康的一种方式。通过错误率,超时,并发等机制来使第三方处于一个健康且提供性能最佳的方式。hystrix 是比较通用的熔断器库。以下为介绍该熔断器源码以及处理思想。核心思想先看看需要配置什么参数,都是从参数玩出的花。Timeout: 执行command的超时时间。默认时间是1000毫秒MaxConcurrentRequests...原创 2020-03-26 09:23:24 · 1812 阅读 · 0 评论 -
合并mysql 请求
合并mysql 请求这个需求是在多表合并当成单表的时候存在非常多的请求。在合并前是各个表的压力。合并后就变成了单个表的压力。相当于是qps 的累加。如果在应用测缓存了请求,进行合并,那么tiDB 端的压力就会小特别多。设计mergeProcess为了合并请求就需要缓存结果。缓存就很熟悉了。 "github.com/patrickmn/go-cache"合并请求那肯定是要有方...原创 2019-12-16 15:15:59 · 281 阅读 · 0 评论 -
golang 本地缓存
本地缓存针对使用非常频繁的表,如某些配置表,往往查询非常频繁并且是表非常小。这个时候可以采取缓存到内存中,定时的去reload 数据,刷新缓存。核心结构体type LoadDataFunc func(ctx context.Context, c *cache.Cache) (map[string]interface{}, error)type LocalCache struct {...原创 2019-12-16 11:28:15 · 5241 阅读 · 0 评论 -
derfer trick 统计函数所花时间
利用defer统计函数所花时间 在学习工程中看到巧妙的利用defer执行了两次函数,一次调用函数本身,但是return了一个新的函数。这个函数在整个函数退出的时候因为defer语句而再次调用。巧妙。func bigSlowOperation() {defer trace("bigSlowOperation")() // don't forget the//extra parent...原创 2018-06-11 10:31:22 · 184 阅读 · 0 评论 -
GMP
golang中goroutine的调度郑宝杨(boya) 2018-08-01 listomebao@gmail.com阅读源码前可以阅读的资料Goroutine背后的系统知识golang源码剖析-雨痕老师go-intervals也谈goroutine调度器golang的调度模型概览调度的机制用一句话描述:runtime准备好G,P,M,然后M绑定P,M从各种队列中获取G,切...转载 2019-03-23 08:48:04 · 993 阅读 · 0 评论 -
golang 开启协程
golang 协程处理协程在golang中相对比较廉价。在特别在做对比的时候特别有优势。在服务重构切换的时候往往需要实现对比机制。新服务调用旧服务做对比上报。如果仅仅是用来上报数据。那么就可以异步化,不影响当前的流程。这时候开启协程无疑是最好的办法。版本一go compareFee(ctx)在得到当前运费的结果之后,开启协程。让他在新的协程调用旧服务,获取了之后对比完,上报cat ...原创 2019-08-14 11:52:49 · 2561 阅读 · 0 评论 -
golang 内存泄漏
内存泄漏内存泄漏简直就是down机之源之一。实在可怕。最近线上就是碰到这个这个问题。一开始查到原因的时候我还不太相信。心想这个结构怎么可能消耗了这个大的一个内存??最后使用工具一看。。好吧。发现问题告警显示go服务的内存飙升到近乎100%。而且是每隔一段时间就会上涨一波,直至100%。但是这个版本之前并没有发现这个问题,那么是新增加的功能引入的问题?定位go还是有自己的定位手段的。特...原创 2019-08-25 14:42:06 · 1639 阅读 · 0 评论 -
golang redis 报错
golang redis 报错问题迁移项目中有一个需求。使用到了redis 设置。由于之前使用的是python。然后自然而然的以为golang的redis 设置单位也是秒。fork python的代码 是缓存5min。于是err = client.Set(key, 1, 5 * 60).Err()最终报错err:ERR invalid expire time in set遇到这...原创 2019-08-27 17:01:17 · 4468 阅读 · 0 评论 -
golang 协程池
golang协程池golang 标榜轻量级协程。但是在大量创建协程后,调度性能以及GC的压力肯定会上升。那么在可预期的情况下我们可以选择控制并发数量(更推荐的做法). + 控制协程的数量。抱着传统的方式,当协程的数量过多,在创建与销毁之前占用了过多的时间的时候,我们通常就会考虑池化。通过空间换时间的方式来提升系统的性能。在google 一番后发现没有特别官方的一个协程库。看到比较多的是an...原创 2019-09-02 21:34:33 · 997 阅读 · 0 评论 -
桶令牌限流器
桶令牌限流器限流是高并发的保护法宝之一。可以这么理解,限流就是在自身能力下尽可能的提供服务。那么限流有哪些算法呢?相关计数器算法漏桶算法桶令牌算法计数器算法就是在固定的时间内只通过固定的请求。 没有缓冲的余地,对于尖刺流量处理并不友好。漏桶算法是固定的处理速度。桶令牌算法相当于是固定的请求入队速度。漏桶和桶令牌顾名思义都有个桶字,用來緩存部分的請求。桶令牌是更优的选择。r...原创 2019-09-09 10:42:43 · 498 阅读 · 0 评论 -
golang 闭包初探
初次接触闭包的概念。主要看看闭包这种语法的效果,以及我的认识。如下是一个简单的闭包形式 参数列表为空,返回的是函数指针。func testClosure() func ()int{ i := 0 return func ()int{ i++ return i }}这时候我们去获取返回的值。 f := ...原创 2018-06-15 21:02:30 · 829 阅读 · 0 评论 -
Defer,Panic,and Recover
Defer,Panic,and Recover最近面试碰到关于 defer的问题比较多,之前实际工作中并没有太深刻的理解。现在翻译一下 https://blog.golang.org/defer-panic-and-recover。这篇文章,加深对这几个内置关键字的理解。前言Go语言有常用饿控制流机制:if, for switch,goto.并且还有不同的机制跑在不同的gorout...原创 2018-06-08 11:41:25 · 495 阅读 · 0 评论 -
模拟请求
模拟请求顾名思义就是通过程序达到模拟人点击按钮触发生的情况。原创 2017-12-31 16:15:21 · 389 阅读 · 0 评论 -
goquery
goquery介绍:goquery是一个使用go语言写成的HTML解析库,可以让你像jQuery那样的方式来操作DOM文档。获取源码goquery在github上开源。地址: https://github.com/PuerkitoBio/goquery. 获取代码: go get https://github.com/PuerkitoBio/goquery 在代码中引用时: impor原创 2017-12-31 16:54:51 · 2076 阅读 · 0 评论 -
wkhtmltopdf
wkhtmltopdf该工具的功能就是把html转为pdf文件用于存档。 为了使用该工具必须先要下载该工具。下载URL下载地址:https://wkhtmltopdf.org/downloads.html 在mac下,下载好了之后已经把路径配置好,相当于是个命令,可以使用该命令来生成对应的PDF。os/exec包为了使用该功能,可以实现封装一层去调用命令行实现相关的配置。在此处不多做描述。关于配原创 2017-12-31 17:12:04 · 2911 阅读 · 1 评论 -
go-imap
go-imapgo-imap库是为了实现连接邮箱服务器获取邮件内容而诞生的工具包。地址https://github.com/emersion/go-imap示例在使用该包的时候还需要一定的imap协议知识,当然都是边看边学就好,英文不好真的是吃亏。 连接服务器c, err := client.DialTLS(conf.Conf.MTRIMAPAddr, nil)defer c.Logout()原创 2017-12-31 17:41:52 · 4362 阅读 · 3 评论 -
Beego环境搭建
Beego环境搭建为熟悉go语言框架,首先选择比较多人使用的Beego框架。环境变量在安装完go之后,应该都配置了环境变量。 我在自己的目录下export GOPATH=$HOME/goexport PATH=$HOME/bin:$GOPATH/bin:$PATH接下来开始下载:go get github.com/astaxie/beegogo get GitHub.com/bee完成后,输入原创 2017-11-26 22:47:22 · 313 阅读 · 0 评论 -
GO new和make
new和make new和make都是golang用来申请空间的内建函数。new实际上用的并不是很多。make 在slice,map都应用较多。new The new build-in function allocates memory(仅仅分配空间). The first argument is a type, not a value, and the value returned is翻译 2018-05-10 15:12:49 · 166 阅读 · 0 评论 -
golang 函数值传递(slice)
转载 https://juejin.im/entry/5a1e4bcd6fb9a045090942d8 点击打开链接对于了解一门语言来说,会关心我们在函数调用的时候,参数到底是传的值,还是引用?其实对于传值和传引用,是一个比较古老的话题,做研发的都有这个概念,但是可能不是非常清楚。对于我们做Go语言开发的来说,也想知道到底是什么传递。那么我们先来看看什么是值传递,什么是引用传递。什么是传值(值传递...转载 2018-05-10 17:50:30 · 7346 阅读 · 1 评论 -
golang chan原理
golang chan原理channel 是实现go语言所谓CSP理念的重点。在进程中通信有多重方式。共享内存,消息队列,socket等方式。而channel是在同一个进程内不同协程之间的通信方式。CSP:CSP模型是上个世纪七十年代提出的,用于描述两个独立的并发实体通过共享的通讯 channel(管道)进行通信的并发模型。channel结构体Channel 实际上是个环形...原创 2018-05-11 13:20:15 · 6292 阅读 · 2 评论 -
Go语言GC
用任何带 GC 的语言最后都要直面 GC 问题。在以前学习 C# 的时候就被迫读了一大堆 .NET Garbage Collection 的文档。最近也学习了一番 golang 的垃圾回收机制,在这里记录一下。常见 GC 算法趁着这个机会我总结了一下常见的 GC 算法。分别是:引用计数法、Mark-Sweep法、三色标记法、分代收集法。1. 引用计数法原理是在每个对象内部维护一个整数值,叫做这个对...转载 2018-06-11 16:42:08 · 719 阅读 · 0 评论 -
单向channel
单向channel 近日在面试中有提到过单向channel。问我是否了解。之前在golang的官方库中确实有看到相应的单向channel的例子,如context包,以及在使用第三方包imap的时候也有使用单向channel,那个是作为通知使用。这里再总结一下单向channel的语法以及为什么使用单向channel的一些看法。语法chan<- //指向channel 表示 单...原创 2018-06-14 12:33:13 · 1629 阅读 · 0 评论