go
文章平均质量分 65
wangfy_
这个作者很懒,什么都没留下…
展开
-
转载:Golang垃圾回收(GC)介绍
转自仅做个人查阅使用。转载 2024-07-04 22:41:09 · 75 阅读 · 0 评论 -
#### golang中【堆】的使用及底层 ####
堆(Heap)是实现优先队列的数据结构,Go提供了接口和方法来操作堆。原创 2024-07-04 20:50:51 · 569 阅读 · 0 评论 -
#### golang的append到底干了啥 ####
涉及:切片 append 引用 复制 底层数组等原创 2024-07-03 21:49:08 · 463 阅读 · 0 评论 -
#### grpc比http性能高的原因 ####
field_number是.proto文件用于定义某个字段,比如对于上述消息结构,id是1,str是2,wow是3,wire_type是google官方定义的,它是消息结构类型的一种再次分类,每个wire_type都可以对应多种数据类型,每种数据类型都有对应的wire_type:可以观察到,protobuf支持的wire_type 范围是0~5,对应二进制也就是000~101,正好是三位,那么按照tag计算公式,field_number左移三位之后,再或上wire_type就组成了tag。原创 2024-06-27 16:49:48 · 1007 阅读 · 0 评论 -
######## golang各章节终篇索引 ########
详细 可选 可选 可选 10个基本排序算法 LRU 参数传递 关系 内存模型 泛型编译/链接 string builder。原创 2024-06-12 13:08:27 · 570 阅读 · 0 评论 -
#### golang 泛型的简单使用
【代码】#### golang 泛型的简单使用。原创 2024-06-13 20:18:29 · 329 阅读 · 0 评论 -
#### go map 底层结构(详细) ####
转自。转载 2024-06-12 13:01:16 · 90 阅读 · 0 评论 -
#### protoc ####
以上述内容为例,假设我们有一个共用的 proto 文件 common.proto,此时 greeter.proto 如果想引用里面的message,就可以使用 import 关键字进行导入。参数针对的是protobuf,是proto文件的命名空间,它的作用是为了避免我们定义的接口,或者message出现冲突。参数是用来指定 protoc-gen-go 插件的工作方式和Go代码的生成位置,而上面的写法正是表明该插件的工作方式。的写法是,参数之间用逗号隔开,最后加上冒号来指定代码的生成位置,比如。转载 2023-02-14 15:17:47 · 1143 阅读 · 0 评论 -
#### grpc-go、grpc-java、brpc-cpp线程模型对比 ####
概括仅做个人备份,浏览请看原文概括三者都实现了一套称为的线程模型(主要使用),只不过他们的实现方式不一样:(1)grpc-go 基于 go语言原生的gmp模型(2)grpc-java 基于 netty的线程模型(3)brpc-cpp 基于 brpc-cpp自己写的一套线程模型。转载 2023-01-28 16:20:31 · 441 阅读 · 0 评论 -
#### protobuf数据序列化与json或xml数据序列化的传输效率的对比 ####
转自:https://juejin.cn/post/7034046510643806238仅做个人查阅及备份用途,浏览请看原文。当对 Protobuf 有了基本的认识后,就会明白了 Protobuf 序列化的数据会比 JSON、XML 传输效率更高。那为啥会高呢?本篇就带着这个问题一探究竟。转载 2023-01-28 15:44:13 · 732 阅读 · 0 评论 -
#### mesh服务网格 及Istio框架 ####
转自仅做个人备份,浏览请看原文。转载 2023-01-19 17:23:28 · 105 阅读 · 0 评论 -
golang Stdout 和 Stderr 日志
转自 http://events.jianshu.io/p/ac89b3e8c65a 仅做个人备份,浏览请看原文。转载 2023-01-19 16:48:58 · 1307 阅读 · 0 评论 -
git refs/for 命令
而与之相对的refs/heads不需要cr。这个不是git的规则,而是gerrit的规则,gerrit是一种免费、开放源代码的代码审查软件。origin : 是远程的库的名字,可以用具体地址,也可以用本地记录的origin常量来表示。HEAD: 一个特别的指针,指向你正在工作的本地分支的指针,可以把它当做本地分支的别名。git pull 远程仓库地址 refs/changes/69/106040069/5。git push :原创 2023-01-07 17:25:54 · 1260 阅读 · 0 评论 -
Goland GOROOT 出现 “The selected directory is not a valid home for Go Sdk“ 问题解决
初学 Golang,今天在配置好 Golang SDK 后,安装 goland IED 编辑器。在配置 goland GOROOT SDK 的过程中,一直报错如下:在百度多番检索未找到解决方案,最后 google 检索 stakeoverflow 找到了精准答案,在此分享。转载 2022-10-25 16:33:39 · 555 阅读 · 0 评论 -
WaitGroup + Channel 并发执行子任务且限制并发度
WaitGroup + Channel 并发执行子任务且限制并发度。原创 2022-10-24 20:20:16 · 211 阅读 · 0 评论 -
#### 负载均衡 ####
上一篇文章一起学习了Resolver的原理和源码分析,本篇继续和大家一起学习下和Resolver关系密切的Balancer的相关内容。这里说的负载均衡主要指数据中心内的负载均衡,即RPC间的负载均衡。传送门基于和。转载 2022-10-14 18:19:32 · 177 阅读 · 0 评论 -
#### 服务发现 ####
在微服务架构中,有许多绕不开的技术话题。比如服务发现、负载均衡、指标监控、链路追踪,以及服务治理相关的超时控制、熔断、降级、限流等,还有RPC框架。这些都是微服务架构的基础,只有打牢这些基础,才敢说对微服务是有了一点理解,出门也好意思和别人打招呼了,被人提问的时候也能侃侃而谈了,线上出了问题往往也能寻根溯源内心不慌了,旁边的女同事小芳看着你的时候也是满眼的小可爱了。在《微服务实践》公众号,之前写了《go-zero微服务实战系列》的系列文章,这个系列的文章更多的是偏向业务功能和高并发下的服务优化等。转载 2022-10-14 18:17:57 · 625 阅读 · 0 评论 -
#### go的编译、链接过程 ####
程序运行前,需要编译和链接两个过程。转载 2022-10-03 19:10:27 · 193 阅读 · 0 评论 -
#### golang存在的父子关系 ####
子ctx cancel 不会取消父ctx。父ctx cancel 会取消子ctx。兄弟ctx cancel 不会取消兄弟ctx。原创 2022-10-03 16:38:03 · 310 阅读 · 0 评论 -
#### 熔断 ####
调用端可以通过熔断机制进行自我保护,防止调用下游服务出现异常,或者耗时过长影响调用端的业务逻辑,很多功能完整的微服务框架都会内置熔断器。其实,不仅微服务调用之间需要熔断器,在调用依赖资源的时候,比如mysql、redis等也可以引入熔断器的机制。转载 2022-10-01 17:36:36 · 96 阅读 · 0 评论 -
#### go中参数传递(涉及:切片slice、map、channel等) ####
Go语言中所有的传参都是值传递,都是一个副本或拷贝,且传参和赋值(=)的操作本质是一样的。map和channel是相似的,初始化map后,返回的是指针变量,在函数之间传递的是map的地址,操作会影响原map。值类型的切片传递,会保持元素的修改影响原切片,但是切片元素的增删(append操作)不会影响原切片。【引用类型】指针、map、slice、chan ,在子函数内修改这些是会修改原函数的内容数据。切片的传递为引用传递,但是注意引用的是切片中的元素而非切片本身。指针类型的切片传递,所有操作均会影响原切片。原创 2022-09-30 16:02:19 · 295 阅读 · 0 评论 -
#### webRTC协议概述 ####
转自仅做个人笔记。转载 2022-09-28 16:38:01 · 613 阅读 · 0 评论 -
#### 并发读写变量或更复杂的结构体slice、map ####
是一个阻塞式写入过程。每循环一次,往切片中追加一个元素,追完完毕之后在进行下一次循环。因此,不会出现追加的元素不正确情况。写入数据之后,后执行的协程同样的往这个索引位写入数据,就导致前面的协程写入数据被后面的协程给覆盖掉。,是一个并发式写入过程。我们无法保证每一次的写都是有序的,存在第一个协程向某个。原创 2022-09-22 21:38:18 · 135 阅读 · 0 评论 -
#### go map 原理、扩容机制、并发不安全 ####
在同一时间点,两个 goroutine 对同一个map进行读写操作是不安全的。① goroutine2 计算key2的hash值,B=2,并确定桶号为1。③ B=B+1=3, buckets数据迁移到oldbuckets。② goroutine1添加key1,触发扩容条件。④ goroutine2从桶1中遍历,获取数据失败。...转载 2022-08-16 17:10:32 · 244 阅读 · 0 评论 -
#### goroutine泄漏的产生、发现及避免 ####
注意:部分内容摘自。原创 2022-08-02 20:37:25 · 215 阅读 · 0 评论 -
#### golang http 源码概览 ####
1)s端,异步处理。为每个请求起一个协程。(2)c端,连接池化。先从池中拿连接,如果没有则创建连接,同时等待空闲连接,如果此时有了则直接使用空闲连接,将创建连接加进连接池或销毁。......原创 2022-07-21 21:26:45 · 167 阅读 · 0 评论 -
Golang http之transport源码详解
转自仅做个人备份使用golangnet/http库发送http请求,最后都是调用transport的RoundTrip方法中。RoundTrip代表一个http事务,给一个请求返回一个响应。RoundTripper必须是并发安全的。RoundTripper接口的实现Transport结构体在源码包net/http/transport.go中。以上是Transport结构体及每个字段的主要功能,从中可以看到idleConn可以理解成空闲的连接池,用于存放空闲的连接,从而使连接可以复用。...转载 2022-07-21 21:22:19 · 1996 阅读 · 0 评论 -
Golang http之server源码详解
转自仅做个人备份我们先看一个简单的httpserver例子当服务器启动后,浏览器访问http8086/hello网页上会显示以上就是http服务的一个简单demo,下面我们主要从源码来分析httpserver。转载 2022-07-21 21:19:56 · 1301 阅读 · 0 评论 -
Golang http之client源码详解
http是典型的C/S架构,客户端向服务端发送请求(request),服务端做出应答(response)。本文章主要介绍Golang中http客户端的相关源码,源码主要在net/http/client.go中。源码版本号为1.10.3一个简单的http客户端请求例子import("log""fmt""net/http")resp,erriferr!=nil{}d,erriferr!=nil{}}...转载 2022-07-21 21:18:10 · 966 阅读 · 0 评论 -
git pull --prune
即:git pull -p如果远程库里删了某个分支或是某些文件,那么用git pull的时候会报错“error: cannot update the ref 'XXX: there are still logs under 'XXX”。 那么加上-p就会把本地的分支或是那些文件也删除掉了。其实报错是为了防止误删东西。...转载 2022-07-11 16:27:21 · 1308 阅读 · 0 评论 -
#### k8s ####
K8s 采用Master / Work Node(最初称为Minion,后改名Node) 的结构,Master Node(主节点)控制整个集群,Work Node(从节点)为集群提供计算能力。使用者可以通过命令行或者 Web 控制台页面的方式来操作集群。下图可以清楚地表示出 K8s 的整体架构了解到 K8s 由主节点、工作节点两大部分组成后,接下来我们逐一展开,看看主节点和工作节点分别由哪些组件构成。Master 节点是 K8s 集群的大脑,负责向外开..................转载 2022-07-04 13:31:52 · 236 阅读 · 0 评论 -
同城多活、两地三中心、单元化
首先1、同城多活2、两地三中心(冷备意义不大)3、单元化着重讲单元化【此部分转自:单元化架构解决了什么问题 - 知乎】首先,我们先来看下单元化是什么。所谓单元,是指一个能完成所有业务操作的自包含集合,在这个集合中包含了所有业务所需的所有服务,以及分配给这个单元的数据。假如一个业务有30亿数据,采用单元化架构部署的话,我们可以把数据拆解为3份,每份10亿数据,建立3个单元,这三个单元,业务服务一模一样,但是数据库存储的数据不同,分别是10亿数据。这里根据数据进行单元的拆分,原创 2022-01-14 12:15:20 · 1876 阅读 · 0 评论 -
xss测试案例
<img/src=1 onerror=(alert)(2233)>"><img/src=1 onerror=(alert)(2233)><script>alert(2233)</script>"><script>alert(2233)</script>原创 2021-12-10 11:50:53 · 302 阅读 · 0 评论 -
[warning!] golang defer函数里的ctx超时 会导致分布式锁或其他资源无法释放
注意:UnLock的ctx要使用context.Background() 如果UnLock依旧使用原ctx,可能会因为原ctx超时会导致UnLock无法执行,进而导致分布式锁无法释放代码:func (s *MyService) MyFunc(ctx context.Context) (err error) { // redis lock if err = s.dao.LockWithExp(ctx, model.GetMyKeyRedisLock(), ...原创 2021-10-01 11:32:55 · 443 阅读 · 2 评论 -
#### LRU算法 ####
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。设计思路使用map+链表: 1)链表负责维护node的顺序。 2)map负责以O(1)的复杂度快速定位node在链表中的位置。具体的,map的key存node值,map的value存node的地址。当'node新增'或'访问node命中'时,放或移到链表头;当需要淘汰node时,淘汰链表尾的node。此时,新增、访问、移动、删除的时间复杂.....原创 2020-05-25 14:03:58 · 652 阅读 · 1 评论 -
goroutine func 内使用 defer + recover 捕获 panic 的意义
背景:goroutine func 内 panic 不会影响外部协程,所以外部协程对 goroutine func 内的 panic 可能无感知,可能会发生 goroutine func 内的 panic 但外部协程正常往下执行的情况。所以:要在goroutine func 内的识别 panic 打印日志,可选的把err返出来,若真的需要返出err的话要使用channel。// 伪代码func Ping(ctx context.Context) error { ... code ....原创 2021-07-09 19:32:09 · 866 阅读 · 0 评论 -
#### golang map并发的问题 以及sync.map ####
问题map并发读写,会出现:fatal error: concurrent map read and map write,源码:const ( ... hashWriting = 4 // a goroutine is writing to the map ...)type hmap struct { ... flags uint8 ...}map是检查是否有另外线程修改h.flag来判断,是否有并发问题。// 在更新map的函数里检查并发写 if h.f原创 2021-04-30 10:59:40 · 1053 阅读 · 0 评论 -
在goland里附带参数run/debug
原创 2021-04-20 10:24:39 · 4111 阅读 · 0 评论 -
令牌桶限流之redis-cell模块
部分摘自:https://blog.csdn.net/yzf279533105/article/details/111310685仅做个人备份,浏览请看原文目录令牌桶算法 概念安装使用令牌桶算法 概念令牌桶算法的优势:令牌桶在应对突发流量的时候,桶内假如有 100 个令牌,那么这 100 个令牌可以马上被取走,而不像漏桶那样匀速的消费。所以在应对突发流量的时候令牌桶表现的更佳。详见:https://blog.csdn.net/chushoufengli/article/.转载 2021-04-09 17:04:07 · 286 阅读 · 0 评论 -
#### golang channel的结构 ####
前言Golang在并发编程上有两大利器,分别是channel和goroutine,这篇文章我们先聊聊channel。熟悉Golang的人都知道一句名言:“使用通信来共享内存,而不是通过共享内存来通信”。这句话有两层意思,Go语言确实在sync包中提供了传统的锁机制,但更推荐使用channel来解决并发问题。这篇文章会先从channel的用法、channel的原理两部分对channel做一个较为深入的探究。channel用法什么是channel从字面上看,channel的意思大概就是管道的意.转载 2021-03-31 14:49:48 · 23523 阅读 · 1 评论