WaitGroupWaitGroup是一种控制并发的方式,它的这种方式是控制多个goroutine同时完成。func main() { var wg sync.WaitGroup wg.Add(2) go func() { time.Sleep(2*time.Second) fmt.Print ......
526
0
0
2022-08-11
章节主要目的主要是围绕高质量代码,完成性、规范性和鲁棒性。测试用例的编写,通常情况,我们为了完成单元测试覆盖率都是草草了事,学习这一章我们可以发现,我们之前的测试用例实用性很差,只有正常情况的用例,并且很多时候只有一个。之后我也跟着用例从三方面来运行:1、功能测试,2、负面测试,3、边界测试。负面测试可以理解为错误测试,异常情况的测试。正式开始第三章面试题1 ......
309
0
0
2022-08-11
先看一段代码package app import ( "github.com/gin-gonic/gin" "github.com/EDDYCJY/go-gin-example/pkg/e" ) type Gin struct { C *gin.Context } func (g *Gin) Respon ......
386
0
0
2022-08-11
序言 - From 万俊峰Kevin我们能把服务做到平均延迟基本在30ms左右,其中非常大的一个前提是我们大量使用了 MapReduce 技术,让我们的服务即使调用很多个服务,很多时候也只取决于最慢的那一个请求的时长。对你现有的服务,不需要优化 DB 操作,不需要优化缓存,不需要重写业务逻辑,只需要通过 MapReduce 把正交(不相关)的请求并行化,你就 ......
325
0
0
2022-08-10
package main import "fmt" //map的基本使用 func main() { //定义一个变量 ,类型为 map[int]string var m map[int]string fmt.Println("m=", m) //对于map只有len,没有cap ......
414
0
0
2022-08-10
灵魂三问:客户端请求超时,取消了请求,服务端还会继续执行么?客户端请求超时,取消了请求,服务端还会返回结果么?客户端请求超时,取消了请求,服务端会报错么?问题现象告警群里有告警,定位到报错的微服务看到如下报错:Post http://ms-user-go.mp.online/user/listByIDs: context canceled。项目中没有发现ca ......
600
0
0
2022-08-09
go swagger 自动生成文档前言在写完代码或者正在写代码的时候,如果要与前端进行同步开发文档是必须的,但是如果在写代码的时候发现接口要改,这个时候为了确保前端能够理解又要修改开发文档,万一忘记改了,可能无法面对前端的质问这个时候一个实时同步的开发文档就很重要了学习使用1.安装# 安装 swag 如果不行直接上二进制文件 (国内的连接问题 -- 直接用二 ......
575
0
0
2022-08-05
简介在开发中我们可能会遇到需要在程序中调用脚本的需求,或者涉及到两个语言之间的交互,笔者之前就遇到了需要在go中调用python的需求,然后在代码中应用了go-python3这个库,实际上在go中调用python的脚本也是一个解决之法。这片文章将介绍在go中运行shell脚本的方法以及对其源码的相应解析。程序用例test_command.gopackage ......
359
0
0
2022-08-05
goroutine 和 channel 是 Golang 的并发的两把利剑,想要掌握 Golang,需要学好这两把利剑。还好这并不难,我送了两趟外卖就想明白了🐶。简介Goroutine 被称为Go协程,可以通过 go 关键词创建一个协程。go func() { // do }() Channel 被称为通道,通过 make 关键创建。ch : ......
378
0
0
2022-08-04
前言我们经常会谈到并发和并行这两个词,对于操作系统而言,并发是指一个处理器同时处理多个任务。并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。以下这张图可以比较形象的讲解并发和并行,并发是两个队列交替使用一台咖啡机,并行是两个队列同时使用两台咖啡机,这里的队列可以代表执行的程序。正文这里聚焦在并发处理上,对于不同的程序,我们知道是在处理器上交替执行 ......
506
0
0
2022-08-02
为什么需要布隆过滤器想象一下遇到下面的场景你会如何处理:手机号是否重复注册用户是否参与过某秒杀活动伪造请求大量 id 查询不存在的记录,此时缓存未命中,如何避免缓存穿透针对以上问题常规做法是:查询数据库,数据库硬扛,如果压力并不大可以使用此方法,保持简单即可。改进做法:用 list/set/tree 维护一个元素集合,判断元素是否在集合内,时间复杂度或空间复 ......
386
0
0
2022-08-01
Go Markdown 博客系统基于 Go 语言实现的 Markdown 博客系统技术栈前端框架:bootstrap语言:go网络库:标准库 net/http配置文件解析库 Viper日志库zap:github.com/uber-go/zapelasticsearch:github.com/olivere/elastic/v7mysql:github.com ......
375
0
0
2022-07-31
什么是切片切片(slice)是对数组一个连续片段的引用。切片是一个引用类型,它实际并不存储元素,它只是标识了数组上的某一个连续片段。数组在内存中是一连串的内存空间,每个元素占据一块内存。切片的数据结构是一个结构体,结构体内由三个参数。Pointer 指向数组中它要表示的片段的起始元素;len 长度cap 最大容量type slice struct { ......
429
0
0
2022-07-30
为什么需要一致性哈希首先介绍一下什么是哈希Hash,一般翻译做散列,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩 ......
371
0
0
2022-07-29
序言示例代码 github.com/acrossmountain/gs-demo上章 Go-Spring 入门篇(二)讲到 controller 的主要能力为路由注册,参数处理复杂的逻辑应当拆分到 service 中。本章我们讲复杂的逻辑拆分到 service 中,为了不作为一个示例而太简单,让学习者觉得没有什么意义,决定先做一个上传的能力,先看拆分 ser ......
383
0
0
2022-07-29