金九银十面试季到了(PS:貌似今年一年都是面试季),就业环境很差,导致从业人员不得不卷。之前整理了一篇:# GO面试必知必会面试题,收到了小伙伴们的好评。这篇文章将重点讲解Go面试进阶知识点:select和channel。select先说switch...case...switch...case... 很常用,且很好理解。其作用和if...else...一样 ......
394
0
0
2022-11-25
前言本文将介绍Go中的各种字段类型的字节数和对齐保证。详细可见个人博客:linzyblog.netlify.app/一、内存对齐1、什么是内存对齐?元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构体存储的首地址开始,每个元素放置到内存中时,它都会认为内存是按照自己的大小(通常它为4字节(32位)或8字节(64位))来划分的,因此元素放置的 ......
490
0
0
2022-11-24
前言个人网站:linzyblog.netlify.app/示例代码已经上传到github:点击跳转gRPC官方文档:点击跳转在前面的章节中,我们介绍了两种可全局认证的方法:基于 CA 的 TLS 证书认证拦截器 interceptor而在实际需求中,常常会对某些模块的 RPC 方法做特殊认证或校验,而gRPC也专门提供了这类特殊认证的接口。《通过TLS建立安 ......
403
0
0
2022-11-24
前言个人网站:linzyblog.netlify.app/示例代码已经上传到github:点击跳转gRPC官方文档:点击跳转一、拦截器概述1、什么是拦截器?在常规的 HTTP 服务器中,我们可以设置有一个中间件将我们的处理程序包装在服务器上。此中间件可用于在实际提供正确内容之前执行服务器想要执行的任何操作,它可以是身份验证或日志记录或任​​何东西。中间件:中 ......
558
0
0
2022-11-24
前言个人网站:linzyblog.netlify.app/示例代码已经上传到github:点击跳转gRPC官方文档:点击跳转一、明文传输先前的例子中 gRPC Client/Server 都是明文传输的,在明文通讯的情况下,你的请求就是裸奔的,有可能被第三方恶意篡改或者伪造为“非法”的数据。我们抓个包查看一下:是明文传输,后面我们开始gRPC通过 TLS 证 ......
424
0
0
2022-11-24
前言这章的内容需要安装好插件和protoc,建议阅读我的上一篇 grpc使用篇个人网站:linzyblog.netlify.app/示例代码已经上传到github:点击跳转gRPC官方文档:点击跳转一、gRPC的请求模型gRPC 有两种类型的请求模型:一元 - 直接的请求响应映射在 HTTP/2 请求响应之上。简单来说一元就是一个简单的 RPC,其中客户端使 ......
406
0
0
2022-11-24
前言个人网站:linzyblog.netlify.app/示例代码已经上传到github:点击跳转gRPC官方文档:点击跳转一、gRPC概述1、什么是gRPC?gRPC 是一个强大的开源 RPC(远程过程调用)框架,用于构建可扩展且快速的 API。它允许客户端和服务器应用程序透明地通信并开发连接的系统。gRPC框架依赖 HTTP/2、协议缓冲区和其他现代技术 ......
409
0
0
2022-11-24
前言通过protubuf文档先了解一下protobuf语法。个人网站:linzyblog.netlify.app/示例代码已经上传到github:点击跳转一、Protobuf1、什么是protobuf?Protocol Buffers ( Protobuf ) 是一种免费的开源 跨平台数据格式,用于序列化结构化数据。它是谷歌公司开发的一种数据描述语言,并于2 ......
478
0
0
2022-11-24
前言本文作为Grpc的开篇,通过文档先了解一下rpc。个人网站:linzyblog.netlify.app/示例代码已经上传到github:点击跳转一、RPC1、什么是RPC?RPC(Remote Procedure Call 远程过程调用)是一种软件通信协议,一个程序可以使用该协议向位于网络上另一台计算机中的程序请求服务,而无需了解网络的详细信息。RPC ......
368
0
0
2022-11-24
Go 的 error 和 Java 的 Exception 最明显的区别在于:原生库不携带 stacktrace原生库不支持 Wrap这给程序 debug 带来了一些麻烦,因此我们会使用 github.com/pkg/errors 来替代原生 errors 包来处理 Error。但又因第三方库的 error 大概率没有使用 github.com/pkg/er ......
349
0
0
2022-11-22
索引:www.waterflow.link/articles/166688...当我们打印错误的时候使用锁可能会带来意想不到的结果。我们看下面的例子:package main import ( "fmt" "sync" ) type Courseware struct { mutex sync.RWMutex ......
422
0
0
2022-11-17
0.1、索引waterflow.link/articles/1666449874...1、字符串编码在go中rune是一个unicode编码点。我们都知道UTF-8将字符编码为1-4个字节,比如我们常用的汉字,UTF-8编码为3个字节。所以rune也是int32的别名。type rune = int32 当我们打印一个英文字符hello的时候,我们可以得到 ......
429
0
0
2022-11-17
索引:waterflow.link/articles/1666277946...在go中切片的底层是数组,所以切片的数据连续存储在数组的数据结构中。如果底层的数组满了,切片还需要添加元素的话,底层数组就需要扩容。如果底层数组几乎为空时,就会缩容。在切片内部其包含一个指向底部数组的指针、切片的长度、切片的容量。长度是指切片包含的元素树,容量底层数组中的元素数。 ......
466
0
0
2022-11-17
0.1、索引waterflow.link/articles/1665938704...我们都知道当发起http请求的时候,服务端会返回一些http状态码,不管是成功还是失败。客户端可以根据服务端返回的状态码,判断服务器出现了哪些错误。我们经常用到的比如下面这些:200:OK,请求成功204:NO CONTENT,此请求没有要发送的内容,但标头可能很有用。 用 ......
590
0
0
2022-11-16
0.1、索引waterflow.link/articles/1665853719...当我们编写 HTTP 应用程序时,您可以使用 HTTP 中间件包装特定于路由的应用程序处理程序,可以在执行应用程序处理程序之前和之后执行一些常见的逻辑。 我们通常使用中间件来编写跨领域组件,例如授权、日志记录、缓存等。在 gRPC 中可以使用称为拦截器的概念来实现相同的功能 ......
522
0
0
2022-11-16