
Go
文章平均质量分 84
Gopher-毛
通信专业本科,23年毕业。目前全身心转码,go 服务器开发工程师。所以基本不会再更新和回答通信相关的任何内容,望海涵,江山代有才人出,肯定有很多比我更优秀的人,望大家寻找新的通信大佬博主。我说:如果有不可能,那就去创造!
展开
-
Gin源码阅读与分析
地址:https://github.com/mao888/golang-guide。大致的流程就是从路由里找出handler,然后进行处理。先执行接下来的handlers,然后返回再执行当前的。实现,使用的数据结构是基数树(radix tree)。里面的第一个handler,然后一个个执行下去。这里会把绝对路由算出来,然后加到树里。的时候发生了什么呢?的同学应该知道,在Go里只要实现。里拿一个空的context,丢到。然后发现没有然后了,那么当我们调用。这就是处理流程,请求来了,从。原创 2022-12-09 18:29:52 · 612 阅读 · 1 评论 -
【go微服务】protobuf中oneof、WrapValue和FieldMask的使用
假设我的博客系统支持为读者朋友们发送博客更新的通知信息,系统支持通过邮件和短信两个方式发送通知。但每一次只允许使用一种方式发送通知。在这个场景下我们就可以使用oneof字段来定义通知的方式——notice_way。// 通知读者的消息}}类似这种场景推荐使用中定义的WrapValue,本质上就是使用自定义message代替基本类型。// ...//}//}// ...在这个示例中,我们就可以使用Int64Value代替int64,修改后的protobuf文件如下。}原创 2022-12-02 16:56:12 · 2519 阅读 · 2 评论 -
【go微服务】Protocol Buffers V3中文语法指南
首先让我们看一个非常简单的例子。假设你想要定义一个搜索请求消息格式,其中每个搜索请求都包含一个查询词字符串、你感兴趣的查询结果所在的特定页码数和每一页应展示的结果数。下面是用于定义这个消息类型的.proto文件。}文件的第一行指定使用proto3语法: 如果不这样写,protocol buffer编译器将假定你使用proto2。这个声明必须是文件的第一个非空非注释行。消息定义指定了三个字段(名称/值对) ,每个字段表示希望包含在此类消息中的每一段数据。每个字段都有一个名称和一个类型。原创 2022-11-25 16:23:59 · 995 阅读 · 0 评论 -
【go微服务】gRPC
像许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以通过参数和返回类型远程调用的方法。默认情况下,gRPC 使用作为接口定义语言(IDL)来描述服务接口和有效负载消息的结构。可以根据需要使用其他的IDL代替。例如,下面使用 protocol buffers 定义了一个服务。}}}在gRPC中你可以定义四种类型的服务方法。普通 rpc,客户端向服务器发送一个请求,然后得到一个响应,就像普通的函数调用一样。服务器流式 rpc,其中客户端向服务器发送请求,并获得一个流来读取一系列消息。原创 2022-11-11 12:28:07 · 1638 阅读 · 1 评论 -
【go微服务】RPC的原理与Go RPC
RPC(Remote Procedure Call),即远程过程调用。它允许像调用本地服务一样调用远程服务。RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。首先与RPC(远程过程调用)相对应的是本地调用。原创 2022-11-11 12:09:45 · 3348 阅读 · 1 评论 -
golang实现es根据某字段分组,统计每组某一字段的数量,过滤空值并去重
需求:根据app.Id分组,统计每组的OwnerBid数量,过滤空值并去重。欢迎进群交流:1007576722。原创 2022-09-20 17:15:06 · 2060 阅读 · 2 评论 -
golang实现es根据某个字段分组,对某个字段count总数,对某个字段sum求和
一个series 有 n 个dna,series 与 dna关系为 1 :n。欢迎进群交流:1007576722。:实现按照dna发行数量(系列下。的总数)或者发行金额(系列下。)排序,同时支持分页功能。原创 2022-09-09 18:08:47 · 2535 阅读 · 1 评论 -
【面向校招】Golang面试题总结
相当int32golang中的字符串底层实现是通过byte数组的,中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8byte等同于int8,常用来处理ascii字符rune等同于int32,常用来处理unicode或utf-8字符参考如下连接jsonname-fieldjsonname-field就是jsonname-field这部分gormjsonyamlgRPCprotobufgin.Bind()都是通过反射来实现的答。......原创 2022-07-31 17:59:00 · 3765 阅读 · 1 评论 -
【微服务】http与RPC
纯裸TCP是能收发数据,但它是个无边界的数据流,上层需要定义消息格式用于定义消息边界。于是就有了各种协议,HTTP和各类RPC协议就是在TCP之上定义的应用层协议。RPC本质上不算是协议,而是一种调用方式,而像gRPC和thrift这样的具体实现,才是协议,它们是实现了RPC调用的协议。目的是希望程序员能像调用本地方法那样去调用远端的服务方法。同时RPC有很多种实现方式,不一定非得基于TCP协议。从发展历史来说,**HTTP主要用于b/s架构,而RPC更多用于c/s架构。性能HTTP2.0在。......原创 2022-07-24 11:27:41 · 652 阅读 · 2 评论 -
golang 处理web post、get请求以及string to json格式的转化
使用 go语言内置"net/http"包原创 2022-07-13 10:48:27 · 797 阅读 · 1 评论 -
基于Go语言实现OSS文件上传(local)
Config:server/config/oss.gopackage configtype Local struct { Path string `mapstructure:"path" json:"path" yaml:"path" `}type Qiniu struct { Zone string `mapstructure:"zone" json:"zone" yaml:"zone"` Bucket string `mapstruc原创 2022-04-29 23:50:15 · 2424 阅读 · 1 评论 -
【Golang面经】Channel、Context、Goroutine
目录ChannelChannel读写特性(15字口诀)channel线程安全限制goroutine的数量尝试 chanContext接口定义Deadline()Done()Err()Value()ChannelChannel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。它的操作符是箭头 <- 。channel一般用于协程之间的通信,channel也可以用于并发控制。比如主协程启动N个子协程,主协程等待所有子协程原创 2022-04-24 00:27:18 · 1494 阅读 · 1 评论 -
【面向校招】全力备战2023Golang实习与校招
目录1、自我介绍2、GO3、设计模式4、Git5、计算机网络6、Mysql7、Redis8、操作系统9、数据结构与算法12、场景题11、项目wework灵鹿推风铃草论坛1、自我介绍2、GO文档a. 李文周的博客b. Golang修养之路c. GO专家编程d. 地鼠文档e. GO语言和java语言之间的对比联系go【go学习】Golang底层学习笔记【Go学习】Go内存管理与并发控制GoWeb【GoWeb开发】基于Cookie、Session和基于JWT Token的认证模原创 2022-04-16 21:30:04 · 6919 阅读 · 1 评论 -
【Go学习】Go内存管理与并发控制
目录内存管理内存分配原理1. 前言2. 基础概念2.1 span2.2 cache2.3 central2.4 heap3. 内存分配过程4. 总结垃圾回收原理1. 前言2. 垃圾回收算法3. Golang垃圾回收3.1 垃圾回收原理3.2 内存标记(Mark)3.3 三色标记法3.4 Stop The World4. 垃圾回收优化4.1 写屏障(Write Barrier)4.2 辅助GC(Mutator Assist)5. 垃圾回收触发时机5.1 内存分配量达到阀值触发GC5.2 定期触发GC5.3 手原创 2022-03-20 16:44:17 · 1551 阅读 · 0 评论 -
【算法基础】堆排序——O(nlogn)
【算法基础】快速排序——O(nlogn)原创 2022-03-12 21:58:27 · 1997 阅读 · 0 评论 -
【算法基础】快速排序——O(nlogn)
快速排序快速排序算法由 C. A. R. Hoare 在 1960 年提出。它的时间复杂度也是 O(nlogn),但它在时间复杂度为 O(nlogn) 级的几种排序算法中,大多数情况下效率更高,所以快速排序的应用非常广泛。再加上快速排序所采用的分治思想非常实用,使得快速排序深受面试官的青睐,所以掌握快速排序的思想尤为重要。快速排序算法的基本思想是:从数组中取出一个数,称之为基数(pivot)遍历数组,将比基数大的数字放到它的右边,比基数小的数字放到它的左边。遍历完成后,数组被分成了左右两个区原创 2022-03-05 14:56:15 · 3557 阅读 · 1 评论 -
【go学习】Golang底层学习笔记
1.1.1. Go编译词法与语法分析意义:解析源代码文件,将文件中字符串序列转换成Token序列把执行词法分析的程序称为词法解析器(lexer)语法解析的结果就是抽象语法树(AST)每个AST都对应一个单独的Go语言文件,这个抽象语法树中包括当前文件属于的包名,定义的常量,结构体和函数等如果发生错误,被语法解析器发现并将消息打印在标准输出上,编译过程直接中止Go语言早期用lex做词法分析,后续还是使用Go语言实现词法分析器,自己写的词法分析器分析自己类型检查和AST转换编译器对语原创 2022-02-26 18:16:02 · 1482 阅读 · 0 评论 -
【Go微服务】—— RPC
目录1. RPC1.1.1. RPC简介1.1.2. 流行RPC框架的对比1.1.3. golang中如何实现RPC1.1.4. RPC调用流程1.1.5. 网络传输数据格式1.1.6. 实现RPC服务端1.1.7. 实现RPC客户端1.1.8. 实现RPC通信测试1. RPC1.1.1. RPC简介远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程如果涉及的软件采用原创 2022-02-19 17:47:00 · 1902 阅读 · 3 评论 -
【GoWeb开发】基于Cookie、Session和基于JWT Token的认证模式介绍
HTTP是一个无状态的协议,一次请求结束后,下次在发送服务器就不知道这个请求是谁发来的了(同一个IP不代表同一个用户),在Web应用中,用户的认证和鉴权是非常重要的一环,实践中有多种可用方案,并且各有千秋。原创 2022-02-12 00:47:00 · 983 阅读 · 1 评论