Go 每日一库之 air

简介air是 Go 语言的热加载工具,它可以监听文件或目录的变化,自动编译,重启程序。大大提高开发期的工作效率。快速使用本文代码使用 Go Modules,在 Mac 上运行。先创建目录并初始化:$ mkdir air && cd air $ go mod init github.com/darjun/go-daily-lib/air执行下面的命令安装air工具:$ go get -u github.com/cosmtrek/air上面的命令会在$GOPATH/bin目录下生成air命令。我一般...阅读全文

2020-10-07 10:32:32 darjun
阅读:4819 评论:1

加密算法推荐清单

1. 背景 文中所列出的推荐算法皆已经过全世界密码学家验证和各国际标准化组织认证, 并在市场中广泛应用, 有望在未来足够长的时间内保证安全性和实现性能。 2. 密码学家的工具箱 2.1 散列算法 散列算法是密码学算法中非常重要的一个分支, 通过对所有数据提取指纹信息以实现数据签名、 数据完整性校验等功能。 用于消息唯一性和数据完整性验证的散列函数, 其安全性依赖于函数本身的属性和对抗碰撞的抵抗, 因此散列函数的选择至关重要。 MD 系列函数已宣告破解, 可被轻易伪造, 不能作为安全散列函数使用。...阅读全文

阅读:4358 评论:0

用Go构建Teamwork项目的9条教训

用Go构建Teamwork项目的9条教训 编者按:本文由 Teamwork 高级工程师 Peter Kelly 授权「高可用架构」发布中文版。转载请注明来自高可用架构公众号「ArchNotes」。 我们爱 Go。 在过去的一年中,我们为了构建 Teamwork Desk 多个服务,写下了将近 20 万行 Go 代码。我们已经构建了该产品的十多个小型 HTTP 服务。 为什么要使用 Go? Go 是一种快速(非常快)的静态类型编译语言,它有强大的并发模型、垃圾收集、优异的标准库、无继承、传奇的作者...阅读全文

2020-11-08 20:07:43 高可用架构
阅读:1120 评论:0

golang复用http.request.body

问题及场景业务当中有需要分发http.request.body的场景。比如微信回调消息只能指定一个地址,所以期望可以复制一份消息发给其他服务。由服务B和接收微信回调的服务A一起处理微信回调信息。本文将详细介绍golang复用http.request.body的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧解决思路最开始考虑的是直接转发http.request。使用ReverseProxy直接将http.request由服务A转发给服务B。但是微信涉及到验证等问题,完全调...阅读全文

2020-12-02 23:32:39 也许会了
阅读:672 评论:0

动图展示 10 大 Git 命令

image.png 作者:Lydia Hallie https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1 git merge、git rebase、git reset、git revert、git fetch、git pull、git reflog……你知道这些 git 命令执行的究竟是什么任务吗?如果你还有些分不清楚,那千万不能错过这篇文章。在本文中,熟知 JavaScript、TypeScript、GraphQL、...阅读全文

2020-12-22 16:32:51 wwmin_
阅读:599 评论:0

构建RESTful API的13种最佳实践

翻译:Eolinker 来源:www.eolinker.com Facebook、GitHub、Google以及其他许多巨头都需要一种服务和消费数据的方式。在当今的开发环境中,RESTful API仍然是服务和消费数据的最佳选择之一。 但是你是否考虑过学习行业标准?设计RESTful API的最佳实践是什么?从理论上讲,任何人都可以在不到五分钟的时间内快速启动数据API——无论是Node.js,Golang还是Python。 我们将探讨在构建RESTful API时应考虑的13种最佳实践。 什么...阅读全文

2020-12-23 20:32:41 隔壁汪书
阅读:817 评论:0

实现动态负载均衡和服务平滑发布怎么实现?靠“Nginx、Consul、Upsync“三兄弟就够了!

前提 前段时间顺利地把整个服务集群和中间件全部从UCloud迁移到阿里云,笔者担任了架构和半个运维的角色。这里详细记录一下通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布的核心知识点和操作步骤,整个体系已经在生产环境中平稳运行。编写本文使用的虚拟机系统为CentOS7.x,虚拟机的内网IP为192.168.56.200。 通过Nginx、Consul、Upsync实现动态负载均衡 动态负载均衡的基本原理 一般会通过upstream配置Nginx的反向代理池: http {...阅读全文

2021-01-09 19:38:45 代码小能手
阅读:713 评论:0

Golang后台单元测试实践

[toc] Why单元测试 让我们对重构与修改有信心 新功能的增加,代码复杂性的提高,优化代码的需要,或新技术的出现都会导致重构代码的需求。在没有写单元测试的情况下,对代码进行大规模修改,是一件不敢想象的事情,因为写错的概率实在太大了。而如果原代码有单元测试,即使修改了代码单测依然通过,说明没有破坏程序正确性,一点都不慌! 及早发现问题,降低定位问题的成本 bug发现的越晚,修复它的费用就越高,而且呈指数增长的趋势。作为编码人员,也是单元测试的主要执行者,能在单测阶段发现的问题,就不用等到联调测...阅读全文

2021-01-16 00:32:48 CG_9b87
阅读:1585 评论:0

使用 Go Modules

Go 的包管理一直被人诟病,有人提出过解决方法,比如 godep、govendor 等工具,但在 G1.11 版本中,Go 官方很霸道的提出了 Go Module 方案,虽然被人吐槽,但现在已经成为事实上的包管理方案。Go 官方也通过一系列的博客来介绍 Go Modules,这是系列的第一篇文章。简介这个系列的文章总共有 5 篇,这是第一篇:使用 Go Modules迁移到 Go Modules发布 Go ModulesGo Modules:V2 及后续版本保持 Modules 的兼容性Go1....阅读全文

2021-01-18 10:36:20 mb5ffbc8f4a5a17
阅读:431 评论:0

Go test和Testify组件

Go test预判工具Testify go test golang编写测试用例时,首先需要建立以_test结尾的go文件,这个文件就是专用的测试文件,使用go test等命令时会执行测试文件中的测试方法。 测试文件中的 一般测试:测试方法名需要以大写的Test开头,参数为*testing.T. func TestSingle(t *testing.T) { t.Log("log here") } 性能测试:测试方法名需要以大写的Benchmark开头,参数为*testing.B. func Be...阅读全文

2021-01-19 12:32:38 新签名
阅读:1771 评论:0

Golang Gorm 事务极简封装

// 事务处理 func Tx(funcs ...func(db *gorm.DB) error) (err error) { tx := DB.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() err = fmt.Errorf("%v", err) } }() for _, f := range funcs { err = f(tx) if err != nil { tx.Rollback() return }...阅读全文

2021-01-22 02:32:38 承诺一时的华丽
阅读:2746 评论:0

[系列] Go - 基于 GORM 获取当前请求所执行的 SQL 信息

前言为了便于精准排查问题,需要将当前的请求信息与当前执行的 SQL 信息设置对应关系记录下来,记录的 SQL 信息包括:执行 SQL 的当前时间;执行 SQL 的文件地址和行号;执行 SQL 的花费时长;执行 SQL 的影响行数;执行的 SQL 语句;数据库组件使用的是 GORM。思路1、在执行 SQL 前,设置开始执行时间(计算执行时长会用到);2、在执行 SQL 后,第一,获取当前请求的上下文,为什么获取上下文,因为需要从上下文中获取本次请求信息,第二,获取 SQL 执行前的时间,用来计算执...阅读全文

2021-01-23 10:03:24 mb6008e9b926b5d
阅读:560 评论:0

让你的Golang项目在IDE里跑起来(Goland使用入门-GOROOT、GOPATH、src、

前言每次新建项目,不熟悉go的项目结构,一般跑都跑不起来,每次都要重新搞一遍,好几回跑项目都会报类似File is invalid的错误有时候报其他奇怪的错误,今天就下决心整理一下,理一理概念 GOROOT、GOPATH、src、 pkg、bin,希望以后不要再出现这样的问题了,同时给看到文章的你一些帮助。熟悉golang项目目录结构要想让你的程序跑起来,要按照这样的目录结构,正常情况下有三个目录:|--bin|--pkg|--src其中,bin存放编译后的可执行文件;pkg存放编译后的包文件;...阅读全文

2021-01-27 14:06:16 mb5ff40ceab21c4
阅读:600 评论:0

embed小技巧-动态文件更新

go1.16 embed可以将文件嵌入到编译后的二进制中,以后发布一个web程序可以只提供一个二进制程序,不需要其他文件,同时避免重复文件io读取。但是在开发时,使用embed后如果修改前端文件那么需要重启GO程序,重新生成embed数据,导致开发过程不方便。提供一个embed支持动态文件的小技巧,使用http.Dir和embed.FS混合组合一个新的http.FileSystem,如果当前目录存在静态文件,那么使用http.Dir返回静态文件内容,否则使用embed.FS编译的内容,这样既可以...阅读全文

2021-02-25 11:32:33 eudore
阅读:707 评论:0

用golang+vue+mysql全栈制作一个博客

Ginblog(项目已完成,欢迎使用)https://gitee.com/wejectchan/ginblog重要更新2021.2.12 为了交流方便,建立了一个QQ群:951736723,如果有问题,欢迎进群交流。2021.2.10 增加了展示页面的移动端适配2021.1.2 加入注册、登录、评论功能,后台管理加入评论审核功能2021.1.3 增加 登录、注册验证功能;增加评论数量显示;增加阅读数量显示增加:文章页面评论数、阅读数介绍gin+vue 全栈制作一个博客。这是一个分享全栈制作过程的...阅读全文

2021-02-28 08:32:33 wejectchen
阅读:1581 评论:0

手撸golang 基本数据结构与算法 图的最短路径  狄克斯特拉算法

缘起 最近阅读<<我的第一本算法书>>(【日】石田保辉;宫崎修一) 本系列笔记拟采用golang练习之 狄克斯特拉算法 与贝尔曼-福特算法类似, 狄克斯特拉(Dijkstra)算法也是求解最短路径问题的算法, 使用它可以求得从起点到终点的路径中权重总和最小的那条路径。 比起需要对所有的边都重复计算权重和更新权重的贝尔曼-福特算法, 狄克斯特拉算法多了一步选择顶点的操作, 这使得它在求最短路径上更为高效。 如果闭环中有负数权重,就不存在最短路径。 贝尔曼-福特算法可以直接认定不存在最短路径, 但在...阅读全文

2021-03-01 13:32:44 老罗话编程
阅读:918 评论:0

还在用crontab? 分布式定时任务了解一下

前言日常任务开放中,我们会有很多异步、批量、定时、延迟任务要处理,go-zero中有 go-queue,推荐使用 go-queue 去处理,go-queue 本身也是基于 go-zero 开发的,其本身是有两种模式:dq:依赖于 beanstalkd ,适合延时、定时任务执行;kq:依赖于 kafka ,适用于异步、批量任务执行;本篇就先从 dq 开始,慢慢探究 go-queue 背后执行的逻辑。dq 简介dq 封装底层 beanstalkd 操作,分布式存储,延迟、定时设置。重启服务可以重新执...阅读全文

2021-03-11 23:32:33 kevinwan
阅读:711 评论:0

Jochen的golang小抄-进阶篇-并发编程(实战篇)

目录runtime包临界资源什么是临界资源临界资源安全问题如何解决临界资源安全问题同步(sync)包同步等待组(WaitGroup)互斥锁读写锁(RWMutex)通道(channel)使用通道(channel)小抄系列进阶篇涉及的概念较多,知识点重要,故每块知识点独立成篇,方便日后笔记的查询本篇的主题是:并发编程在前面我们介绍了go并发模型以及其实现原来,本章要介绍的是go语言中常用的并发编程操作以及要注意的问题runtime包runtime包下包含了go运行时系统交互的操作(如控制gorout...阅读全文

2021-03-11 08:31:47 mob604756e39ef4
阅读:491 评论:0

手撸golang GO与微服务 Saga模式之1

缘起最近阅读<<Go微服务实战>> (刘金亮, 2021.1)本系列笔记拟采用golang练习之Saga模式saga模式将分布式长事务切分为一系列独立短事务每个短事务是可通过补偿动作进行撤销的事务动作和补偿动作都是幂等的, 允许重复执行而不会有副作用Saga由一系列的子事务“Ti”组成, 每个Ti都有对应的补偿“Ci”, 当Ti出现问题时Ci用于处理Ti执行带来的问题。 可以通过下面的两个公式理解Saga模式。 T = T1 T2 … Tn T = TCT Saga模式的核心理念是避免使用长期持...阅读全文

阅读:607 评论:0

一个小技巧加快 golang docker 镜像构建速度,避免频繁下载 go mod

Dockerfile先 COPY go.mod 执行 go mod download,再 COPY 源码执行 build。利用 docker image 分层构建的特性,每行命令为一层。如果底层不变,则可使用 cache,无需重复构建。源码比 go.mod 修改更频繁。FROM golang:1.15-alpine AS builder WORKDIR /workspace ENV GO111MODULE=on \ GOPROXY=https://goproxy.cn,direct # cach...阅读全文

2021-03-29 09:32:35 无风
阅读:1132 评论:0