10 2022 档案

摘要:索引:https://www.waterflow.link/articles/1666884810643 当我们打印错误的时候使用锁可能会带来意想不到的结果。 我们看下面的例子: package main import ( "fmt" "sync" ) type Courseware struct 阅读全文
posted @ 2022-10-27 23:42 liuyuede123 阅读(354) 评论(0) 推荐(0)
摘要:索引:https://waterflow.link/articles/1666534616841 我们先看一个简单的例子,我们自定义一个错误,用来把多个错误放在一起输出: type CustomError struct { errors []string } func (c *CustomError 阅读全文
posted @ 2022-10-23 22:23 liuyuede123 阅读(328) 评论(0) 推荐(0)
摘要:0.1、索引 https://waterflow.link/articles/1666449874974 1、字符串编码 在go中rune是一个unicode编码点。 我们都知道UTF-8将字符编码为1-4个字节,比如我们常用的汉字,UTF-8编码为3个字节。所以rune也是int32的别名。 ty 阅读全文
posted @ 2022-10-22 22:51 liuyuede123 阅读(360) 评论(0) 推荐(0)
摘要:0.1、索引 https://waterflow.link/articles/1666339004798 1、map的结构 map提供了键值对的无序集合,所有的键都是不重复的。在go中map是基于bmap数据结构的。在内部hash表是一个桶数组,每个桶是一个指向键值对数组的指针。每个桶里面可以保存8 阅读全文
posted @ 2022-10-21 16:07 liuyuede123 阅读(742) 评论(0) 推荐(0)
摘要:索引:https://waterflow.link/articles/1666277946416 在go中切片的底层是数组,所以切片的数据连续存储在数组的数据结构中。如果底层的数组满了,切片还需要添加元素的话,底层数组就需要扩容。如果底层数组几乎为空时,就会缩容。 在切片内部其包含一个指向底部数组的 阅读全文
posted @ 2022-10-20 23:08 liuyuede123 阅读(413) 评论(0) 推荐(0)
摘要:0.1、索引 https://waterflow.link/articles/1666171320273 1、概念 接口提供了一种指定对象行为的方法。 我们使用接口来创建多个对象可以实现的通用抽象。 Go 接口不同的原因在于它们是隐式的。 没有像 implements 这样的显式关键字来标记对象 A 阅读全文
posted @ 2022-10-19 17:28 liuyuede123 阅读(170) 评论(0) 推荐(0)
摘要:0.1、索引 https://waterflow.link/articles/1666090530880 1、概念 1.1、源文件里的代码执行顺序 init 函数是用于初始化应用程序状态的函数。 它不接受任何参数并且不返回任何结果(一个 func() 函数)。 初始化包时,将初始化包中的所有常量和变 阅读全文
posted @ 2022-10-18 19:00 liuyuede123 阅读(266) 评论(0) 推荐(0)
摘要:索引:https://waterflow.link/articles/1666019023270 在 Go 中,在块中声明的变量名可以在内部块中重新声明。 这种称为变量阴影的原理很容易出现常见错误。 以下示例显示了由于变量阴影而导致的意外副作用。 它以两种不同的方式获取课件信息,根据printLog 阅读全文
posted @ 2022-10-17 23:18 liuyuede123 阅读(82) 评论(0) 推荐(0)
摘要:0.1、索引 https://waterflow.link/articles/1665938704477 我们都知道当发起http请求的时候,服务端会返回一些http状态码,不管是成功还是失败。客户端可以根据服务端返回的状态码,判断服务器出现了哪些错误。 我们经常用到的比如下面这些: 200:OK, 阅读全文
posted @ 2022-10-17 14:12 liuyuede123 阅读(355) 评论(0) 推荐(0)
摘要:0.1、索引 https://waterflow.link/articles/1665853719750 当我们编写 HTTP 应用程序时,您可以使用 HTTP 中间件包装特定于路由的应用程序处理程序,可以在执行应用程序处理程序之前和之后执行一些常见的逻辑。 我们通常使用中间件来编写跨领域组件,例如 阅读全文
posted @ 2022-10-17 14:11 liuyuede123 阅读(271) 评论(0) 推荐(0)
摘要:0.1、索引 https://waterflow.link/articles/1665674508275 1、什么是grpc 在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使您更容易创建分布式应用程序和服务。 与许多 RPC 系统一样,gRPC 阅读全文
posted @ 2022-10-17 14:11 liuyuede123 阅读(115) 评论(0) 推荐(0)
摘要:01、索引 https://waterflow.link/articles/1665656761584 1、为什么跨域 跨域资源共享 (CORS) 是一种基于 HTTP 标头的机制,它允许服务器指示除其自身之外的任何来源(域、方案或端口),浏览器应允许从中加载资源。 CORS 还依赖于一种机制,浏览 阅读全文
posted @ 2022-10-17 14:10 liuyuede123 阅读(88) 评论(0) 推荐(0)
摘要:0.1、索引 https://waterflow.link/articles/1665239900004 1、串行执行 假如我们需要查询一个课件列表,其中有课件的信息,还有课件创建者的信息,和课件的缩略图信息。但是此时我们已经对服务做了拆分,假设有课件服务和用户服务还有文件服务。 我们通常的做法是, 阅读全文
posted @ 2022-10-17 14:10 liuyuede123 阅读(150) 评论(0) 推荐(0)
摘要:0.1、索引 https://waterflow.link/articles/1664591292871 1、tcp的3次握手(建立连接) 客户端的协议栈向服务器端发送了 SYN 包,并告诉服务器端当前发送序列号 j,客户端进入 SYNC_SENT 状态; 服务器端的协议栈收到这个包之后,和客户端进 阅读全文
posted @ 2022-10-17 14:09 liuyuede123 阅读(317) 评论(0) 推荐(0)
摘要:0.1、索引 https://waterflow.link/articles/1664943418972 文中提到的垃圾回收算法是基于go1.16之后的,让我们直接进入正题吧。 1、什么时候需要垃圾回收? Go 更喜欢在堆栈上分配内存,因此大多数内存分配最终都会在栈上。 这意味着 Go 每个 gor 阅读全文
posted @ 2022-10-17 14:09 liuyuede123 阅读(170) 评论(0) 推荐(0)
摘要:0.1、索引 https://waterflow.link/articles/1664080524986 1、未知的枚举值 我们现在定义一个类型是unit32的Status,他可以作为枚举类型,我们定义了3种状态 type Status uint32 const ( StatusOpen Statu 阅读全文
posted @ 2022-10-17 14:08 liuyuede123 阅读(132) 评论(0) 推荐(0)
摘要:0.1、索引 https://waterflow.link/articles/1663921524839 通过使用一些通用代码来节省时间,而无需单独实现它们。以下是一些开发中经常会用到的函数实现的列表。 1、检查数组中元素是否存在 Golang 没有预定义的函数来检查数组中元素的存在。以下代码片段为 阅读全文
posted @ 2022-10-17 14:08 liuyuede123 阅读(104) 评论(0) 推荐(0)
摘要:0.1、索引 https://blog.waterflow.link/articles/1663772504649 RabbitMQ 是一个轻量级且易于部署的消息队列。它支持开箱即用的多种消息传递协议。我们将使用 AMQP(高级消息队列协议) 1、概念 既然是消息队列,顾名思义,肯定会有生产者生产消 阅读全文
posted @ 2022-10-17 14:07 liuyuede123 阅读(107) 评论(0) 推荐(0)
摘要:索引 https://waterflow.link/articles/1663835071801 当我在使用go-zero时,我看到了好多像下面这样的代码: ... type ( // RunOption defines the method to customize a Server. RunOp 阅读全文
posted @ 2022-10-17 14:07 liuyuede123 阅读(86) 评论(0) 推荐(0)
摘要:0.1、索引 https://blog.waterflow.link/articles/1663551951058 1、for- select模式 这种模式通常用在从多个通道读取数据 package main import ( "fmt" "time" ) func main() { ch1, ch 阅读全文
posted @ 2022-10-17 14:06 liuyuede123 阅读(105) 评论(0) 推荐(0)
摘要:0.1、索引 https://blog.waterflow.link/articles/1663688140724 1、简介 单元测试是测试代码、组件和模块的单元函数。单元测试的目的是清除代码中的错误,增加代码的稳定性,在更改代码时提供正确性。单元测试是软件测试的第一级,然后是集成测试和 ui 测试 阅读全文
posted @ 2022-10-17 14:06 liuyuede123 阅读(121) 评论(0) 推荐(0)
摘要:0.1、索引 https://blog.waterflow.link/articles/1663169309611 1、只读缓存 只读缓存的流程是这样的: 当查询请求过来时,先从redis中查询数据,如果有的话就直接返回。如果没有的话,就从数据库查询,并写入到缓存中。 当删改请求过来时,会直接从数据 阅读全文
posted @ 2022-10-17 14:05 liuyuede123 阅读(138) 评论(0) 推荐(0)
摘要:0.1、索引 https://blog.waterflow.link/articles/1663406367769 1、内存管理 内存管理是管理计算机内存的过程,在主存和磁盘之间移动进程以提高系统的整体性能。内存管理的基本要求是提供方法来根据程序的请求动态的将部分内存分配给程序,并在不需要时释放它以 阅读全文
posted @ 2022-10-17 14:05 liuyuede123 阅读(186) 评论(0) 推荐(0)
摘要:0.1、索引 https://blog.waterflow.link/articles/1663078266267 当我们下载一个大文件的时候,会因为下载时间太久而超时或者出错。那么我么我们可以利用goroutine的特性并发分段的去请求下载资源。 1、Accept-Ranges 首先下载链接需要在 阅读全文
posted @ 2022-10-17 14:05 liuyuede123 阅读(64) 评论(0) 推荐(0)
摘要:0.1、索引 https://blog.waterflow.link/articles/1662974432717 1、进程 一个进程包含可以由任何进程分配的公共资源。这些资源包括但不限于内存地址空间、文件句柄、设备和线程。 一个进程会包含下面一些属性: Process ID:进程ID Proces 阅读全文
posted @ 2022-10-17 14:04 liuyuede123 阅读(93) 评论(0) 推荐(0)
摘要:0、索引 go-zero docker-compose 搭建课件服务(九):http统一返回和集成日志服务 0.1源码地址 https://github.com/liuyuede123/go-zero-courseware 1、http统一返回 一般返回中会有code,message,data。当请 阅读全文
posted @ 2022-10-17 14:04 liuyuede123 阅读(234) 评论(0) 推荐(0)
摘要:0、转载 go-zero docker-compose 搭建课件服务(八):集成jaeger链路追踪 0.1源码地址 https://github.com/liuyuede123/go-zero-courseware 1、链路追踪 一个外部请求需要内部若干服务的联动响应,这时候完整的调用轨迹将跨越多 阅读全文
posted @ 2022-10-17 14:03 liuyuede123 阅读(189) 评论(0) 推荐(0)
摘要:转载自:etcd实现分布式锁 当并发的访问共享资源的时候,如果没有加锁的话,无法保证共享资源安全性和正确性。这个时候就需要用到锁 1、需要具备的特性 需要保证互斥访问(分布式环境需要保证不同节点、不同线程的互斥访问) 需要有超时机制,防止锁意外未释放,其他节点无法获取到锁;也要保证任务能够正常执行完 阅读全文
posted @ 2022-10-17 14:02 liuyuede123 阅读(216) 评论(0) 推荐(0)
摘要:转载自:go channel原理及使用场景 源码解析 type hchan struct { qcount uint // Channel 中的元素个数 dataqsiz uint // Channel 中的循环队列的长度 buf unsafe.Pointer // Channel 的缓冲区数据指针 阅读全文
posted @ 2022-10-17 14:02 liuyuede123 阅读(144) 评论(0) 推荐(0)
摘要:0、转载 go-zero docker-compose 搭建课件服务(五):完善user服务 0.1源码地址 https://github.com/liuyuede123/go-zero-courseware 1、生成model 到项目根目录下创建model目录,并新建user.sql mkdir 阅读全文
posted @ 2022-10-17 14:01 liuyuede123 阅读(155) 评论(0) 推荐(0)
摘要:0、转载 go-zero docker-compose 搭建课件服务(六):完善jwt鉴权和返回结构 0.1源码地址 https://github.com/liuyuede123/go-zero-courseware 1、用户服务登录接口生成jwt token user/api/etc/user.y 阅读全文
posted @ 2022-10-17 14:01 liuyuede123 阅读(140) 评论(0) 推荐(0)
摘要:0、转载 go-zero docker-compose 搭建课件服务(七):prometheus+grafana服务监控 0.1源码地址 https://github.com/liuyuede123/go-zero-courseware 1、什么是prometheus Prometheus是一个开源 阅读全文
posted @ 2022-10-17 14:00 liuyuede123 阅读(122) 评论(0) 推荐(0)
摘要:0、转载 go-zero docker-compose 搭建课件服务(四):生成Dockerfile并在docker-compose中启动 0.1源码地址 https://github.com/liuyuede123/go-zero-courseware 1、目前的目录文件结构 目前只是创建好了co 阅读全文
posted @ 2022-10-17 14:00 liuyuede123 阅读(144) 评论(0) 推荐(0)
摘要:0、转载 go-zero docker-compose 搭建课件服务(三):编写courseware api服务 0.1源码地址 https://github.com/liuyuede123/go-zero-courseware 1、生成api相关文件 # 到之前创建的courseware/api目 阅读全文
posted @ 2022-10-17 14:00 liuyuede123 阅读(87) 评论(0) 推荐(0)
摘要:转载自:实现etcd服务注册与发现 0.1、目录结构 . ├── api │ └── main.go ├── common │ └── common.go ├── docker-compose.yml ├── etcd │ └── Dockerfile ├── go.mod ├── go.sum ├ 阅读全文
posted @ 2022-10-17 13:59 liuyuede123 阅读(345) 评论(0) 推荐(0)
摘要:0、转载 go-zero docker-compose 搭建课件服务(二):编写courseware rpc服务 0.1源码地址 https://github.com/liuyuede123/go-zero-courseware 1、创建model mysql中创建数据库 create databa 阅读全文
posted @ 2022-10-17 13:57 liuyuede123 阅读(79) 评论(0) 推荐(0)
摘要:0、转载 go-zero docker-compose 搭建课件服务(一):编写服务api和proto 0.1源码地址 https://github.com/liuyuede123/go-zero-courseware 1、创建项目目录 mkdir go-zero-courseware cd go- 阅读全文
posted @ 2022-10-17 13:56 liuyuede123 阅读(91) 评论(0) 推荐(0)