![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
文章平均质量分 93
切尔诺贝尔
学海无涯.....做了程序员之后有深刻的体会....
展开
-
golang-性能分析pprof
1. 什么是pprof?为什么需要使用pprof?1.1 什么是pprof?用来做性能分析的工具1.2 pprof可以从哪些角度来进行分析CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏Block Profiling:阻塞分析,记录 goroutine原创 2021-09-21 09:24:06 · 596 阅读 · 0 评论 -
golang-interface(二) 常见问题和底层实现
1. 常见使用问题1.1 var _ I = (*T)(nil) 是什么意思?作用:用简单的语法,检查T这个struct是否实现了I这个接口细化理解:可以把=左右两边分开来看左边:var _ I等价于我们平时用的 var variable type右边:(* T)(nil) 等价于 var variable *T nil示例代码:package mainimport "fmt"type I interface {}type I2 interface { say().原创 2021-07-12 23:19:52 · 465 阅读 · 1 评论 -
golang-map 从常见问题探索map的部分底层实现
文章目录1. 为什么写这样一片文章?2. map的常见问题2.1 map 为什么是无序的?我要有序的map怎么办?2.1.1 首先知道map的底层结构大概是个什么样的,如下图2.1.2 逻辑推论可以做到有序遍历吗?2.1.3 为什么实际遍历的时候不是有序的呢?2.1.4 我要有序的map怎么办?2.2 map 为什么并发读写会报Panic?怎么解决?2.2.1 为什么并发读写会报Panic ?2.2.2 怎么解决并发读写的问题?2.2.3 为什么golang不原生支持map并发?3. map不常见但也值得思原创 2021-07-11 22:35:53 · 284 阅读 · 2 评论 -
grpc-我们为什么要用gRpc?gRpc快在哪里?
文章目录1,什么是grpc2,为什么我们要用grpc3,grpc 的优点是怎么实现的3.1 grpc性能高:protobuf为什么比json性能高?1,什么是protobuf?2,他比json快多少?3,为什么protobuf比json快?3.2 grpc性能高:http2.0为什么比http1.1性能高?1,多路复用2, 头部压缩3, 二进制分帧4, 服务器主动推送资源1,什么是grpcgRpc 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 G原创 2021-07-11 22:34:07 · 1351 阅读 · 1 评论 -
golang-interface(一)为什么要使用interface
文章目录1. interface 是什么?有什么用?1.1 日常生活中的 interface 举例1.2 golang 中interface的定义和用途2. interface-实现多态2.1 示例一:同理于编程最常见的鸭子说法2.2 举例二:golang中的排序3. interface-隐藏函数具体实现3.1 隐藏函数具体实现有什么好处?3.2 示例一:语言角度-golang中的context包3.3 示例二:设计角度-sql4. interface-解耦上下游的依赖4.1 示例一:用户权限校验的实现5.原创 2021-07-11 22:31:10 · 644 阅读 · 2 评论 -
golang - 垃圾回收
文章目录为什么要知道golang垃圾回收机制?golang的垃圾回收历史进程golang v1.3 :标记清除进行垃圾回收golang v1.5 : 三色并发标记清除进行垃圾回收1,为什么要把标记清除优化为三色并发标记?2,三色标记清除法示意图和流程描述3,怎么解决stw时间过长的问题?golang v1.8 : 三色标记清除-混合写屏障具体操作分析参考链接和建议为什么要知道golang垃圾回收机制?优化:工作中可能涉及到需要针对垃圾回收进行优化,所以我们要知其然,才好进行这一块的优化思路:垃圾原创 2021-07-11 22:29:50 · 257 阅读 · 2 评论 -
golang - context包使用示例 以及 底层实现
文章目录1. context 常用方法,以及各种适用于什么场景1.1 context含有的方法1.2 方法适用场景和伪代码示例1.2.1 值传递:比如gin框架中用来传递key,value的值,自己简单示例如下1.2.2 超时控制-timeout: http请求设置超时时间1.2.3, 超时控制-deadline: 比如文件io或者网络io等耗时操作,可以查看剩余的时间是否充足,决定是否进行下一步操作1.2.4. 取消控制: goroutine发送取消信号,保证自己这个逻辑中发散出去的goroutine全部原创 2021-07-11 22:26:27 · 360 阅读 · 2 评论 -
golang-chanel 并发设计 以及使用常见问题
文章目录1. channel 的设计模式CSP是什么?1.1 CSP是什么?对于传统的共享内存有什么好处?1.2 对比 并发模型 Actor 和 CSP2. channel 底层结构是什么样的 ?3. channel使用中遇到过的问题有哪些?怎么解决?3.1 向一个关闭了的channel写入了数据, 导致Panic3.2 一个有缓存的channel已经关闭,还是能够读取到数据3.3 某个函数中对channel进行写入又对channel进行读取,导致复杂度提升4. 参考链接1. channel 的设计模式C原创 2021-07-11 22:25:09 · 219 阅读 · 5 评论 -
nginx-post请求被301到get请求,且丢失请求数据,nginx 配置末尾是否携带斜杠
nginx-post请求被301到get请求,且丢失请求数据问题如下当nginx配置里location有最后一个斜杠如果并且访问url不带/,nginx会自动进行301跳转到带斜杠的url当nginx配置里location没有最后一个斜杠url最后不加/,则是正常访问url加了,则post请求会被重定向为get请求(如果目标路由有同时监听/test/和/test,则不...原创 2019-11-08 09:55:30 · 4698 阅读 · 0 评论 -
golang-context 上下文
context 作用context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、k-v 等Context 使用原则不要将 Context 放入结构体,Context应该作为第一个参数传入,命名为ctx。即使函数允许,也不要传入nil的 Context。如果不知道用哪种Context,可以使用context.TODO()。使用conte...原创 2019-10-12 20:15:55 · 501 阅读 · 0 评论 -
golang-切片排序、map排序、结构体排序
1,slice(切片)排序这个直接看就好了int类型排序s := []int{3,2,4,1}sort.Ints(s)fmt.Println(s) // [1,2,3,4]string类型排序s := []string{"Go", "Bravo", "Gopher", "Alpha", "Grin", "Delta"}sort.Strings(s)fmt.Println(...原创 2019-06-27 19:28:02 · 2942 阅读 · 0 评论 -
mongodb-golang 权限验证报错:SASL authentication step: Authentication failed
起因1,今天在将服务查询db从mysql迁移至mongodb的时候,发现报错如下:{"level":"error","time":"2019-06-27T16:54:31.710+0800","caller":"***.go:151","msg":"auth error: sasl conversation error: unable to authenticate using mecha...原创 2019-06-27 17:10:28 · 20889 阅读 · 0 评论