- 博客(9)
- 问答 (2)
- 收藏
- 关注
原创 go的error的分析
error处理对于我们写程序来说是一个很重要的东西,比如http,grpc的error,他们是errcode和errmsg的解析,而且内部的errcode的常量数字已经写死了,某个常量code对于具体的msg,感兴趣的可以去看看errcode的代码,但是对于error的产生,他有很多种方法,比如我们看到的当然也有自定义struct将error包裹进去的,对于这样error的分析,我们只要知道它的原理,所有的东西就会迎刃而解,对于程序员而说,只有有源码在手,没有分析不出的问题。
2024-06-26 17:56:27 976
原创 go自定义数据的序列化流程
对于网络传输数据而言,在go中只要是[]byte的格式就能进行传输,对于最简单的client->server->mysql,然后数据再传回来的简单流程来分析(其实对于一个进程来说,没有client和server之分,一个进程即可能是客户端,也可能是服务端,mysql本身就是一个server,只是功能不同,笼统来说,没有本质上的区别),本篇以decimal的数据来分析,它的github地址 "github.com/shopspring/decimal"
2024-06-20 17:05:34 683
原创 go的结构体和反射分析
对于UserChild来说,上面的两个函数,指针的调用上面的接口,非指针调用下面的接口,即函数名相同就覆盖,和receiver的是否指针没有关系,和上面测的user是一样的,是否修改只看receiver是否指针有关,和嵌入结构体是否指针无关,最后反射出来的和实际的结构体调用是有区别的,结构体反射出来的,不能调用receiver是指针的函数,切记!反射出来的,结构体指针可以调用那两个函数,而且是否修改也和receiver是否是指针有关,但是结构体就不能调用receiver是指针的,因为它只有一个函数。
2024-04-01 14:31:51 615 1
原创 go的分布式链路追踪(2)
现在为止,第一章生成的四个span的数据的字段(Name,SpanContext,Parent,SpanKind,StartTime,EndTimeAttributes,Events,...),应该都可以读懂了,可以根据这些字段找到父子级的层级关系和时间长短。
2023-12-21 11:47:31 1274
原创 go的分布式链路追踪(1)
本文是在go1.19.11,go-zero1.6.0的user.api和user.rpc两个服务为例子来分析OpenTelemetry的用法。写博客的目的,是用最通俗的语言记录现在,为了让自己不遗忘。首先本文分析的链路是我们通过日志的json格式打印出的 上面对应的span上面的span的属性,我们先不介绍,等开始看源码的时候。
2023-12-20 16:19:45 1162
原创 go的rpc的server分析
上面代码中的注释,基本上把rpc分析完毕,rpc的server很简单,用gob格式读取数据(有兴趣的可以去看看gob读取数据的格式),没有grpc的chain的函数洋葱模型,而且调用函数时,rpc是根据反射来new的args和reply,不像grpc直接生成好对应的结构体,直接给函数地址就好了,这点上grpc性能要好一点,但是rpc有更大的灵活性,可以根据它修改成参数和返回值是自定义的,毕竟实现的少。rpc还是很简单的,最后本人能力有限,如果上面的有纰漏和问题,欢迎大佬指出。
2023-12-18 17:24:10 459
原创 grpc的server分析
将UnaryServerInterceptor函数数组,进行递归调用,从0到n,其中的handler,就是我们前面生成的_User_Login_Handler函数,这个就是一个洋葱模型,和gin的模式差不多,gin是for递归,其实本质差不多,各位可以去试试,所以最终的s.opts.unaryInt = chainedInt,获取到了递归的一个函数的地址。grpc的server的主体实现逻辑还是很清晰简单,可能具体的难点是细节吧,由于本文内容已经很多了,go的rpc放到下章去讲。
2023-12-18 14:28:00 1104
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人