- 博客(286)
- 资源 (12)
- 收藏
- 关注
原创 Golang 中的 EOF 与 read: connection reset by peer 错误深度剖析
在 Golang 网络请求中,我们经常会遇到两种常见的错误:`EOF` 和 `read: connection reset by peer`。这两个错误虽然看似相似,但实际上有着本质的区别。这篇文章将深入探讨这两种错误的原因、区别以及如何优雅的处理它们。
2024-08-07 16:20:51 1418
原创 为什么你应该在代码中消除 “context deadline exceeded“ 错误
在 Go 语言中,`context` 包提供了一种跨 API 和进程边界传递请求作用域值、取消信号以及超时信号的方式。使用 `context` 可以帮助我们更好地控制 goroutine,避免 goroutine 泄漏等问题。
2024-06-14 12:12:52 3365
原创 gorm 中 MySQL 错误码映射与主键冲突错误处理
在使用 gorm 处理数据库操作时,尤其是针对 MySQL,有时我们会遇到 golang 标准库`errors.Is`函数无法直接识别特定的 gorm 错误类型的情况,如主键冲突错误。尽管 gorm 提供了`gorm.ErrDuplicatedKey`来表示此类错误,但在原始错误返回中并不能直接通过`errors.Is(err, gorm.ErrDuplicatedKey)`来进行判断。本文深入探究 gorm.io/driver/mysql 包中的错误转换机制...
2024-03-27 17:34:20 721 3
原创 Ubuntu 上的终端革命:一站式 Zsh 和 Oh My Zsh 安装配置指南
本文介绍了如何在Ubuntu系统上安装和配置zsh和oh-my-zsh,包括基本安装步骤、配置插件等操作。提高终端的使用效率和定制性。
2024-01-03 18:24:18 10442
原创 GORM 中SQL、慢SQL打印日志传递 trace ID, Kratos框架输出日志trace id
这里我使用的log组件是kratos框架的log组件,设置好zap后注入为全局log。创建连接的地方注入我们重写后的自定义Logger。自定义的重写实现。最后,在查询的地方,带上。
2023-09-25 19:09:50 4834
原创 为什么这么设计—— Go的GC
程序的全局变量和静态变量:这些变量在整个程序执行过程中都可以被访问到,因此垃圾回收器会将它们作为根节点。程序的调用栈中的变量:这些变量在函数调用过程中被创建,并在函数返回时被销毁。因此,在函数调用期间,它们被认为是根节点。当前执行的Goroutine:在 Go 语言中,Goroutine 是轻量级的线程,它们可以独立地运行,因此当前执行的Goroutine也被认为是根节点。强三色不变式(Strong Tri-Color Invariant):在任何时刻,灰色对象不会直接或间接引用白色对象。
2023-08-12 19:00:18 3573
原创 golang sync.singleflight 解决热点缓存穿透问题
在 `go` 的 `sync` 包中,有一个 `singleflight` 包,里面有一个 `singleflight.go` 文件,代码加注释,一共 200 行出头
2023-07-29 17:58:46 641
原创 如何在go中实现程序的优雅退出,go-kratos源码解析
通过对操作系统事件的监听,我们就可以对一些必须完成的任务进行优雅地停止,如果有一些任务必须完成,我们可以在任务开始使用 wg := sync.WaitGroup{} 来对任务进行一个Add操作,当所有任务完成,监听到操作系统的关闭动作,我们需要使用wg.wait() 等待任务完成再进行退出。我们可以注意到,在Run方法中,我们使用到了一个signal包下的Notify方法来对操作系统的关闭事件进行监听,这个是我们动作的核心,我把这部分单独整理在了。App结构体:包含应用程序的配置选项和运行时状态。
2023-07-29 14:06:23 994
原创 os.signal golang中的信号处理
在程序进行重启等操作时,我们需要让程序完成一些重要的任务之后,优雅地退出,Golang为我们提供了signal包,实现信号处理机制,允许Go 程序与传入的信号进行交互。
2023-07-29 14:04:56 1094
原创 免费的云数据库:探索PlanetScale,划分分支的MySQL Serverless平台
最近我发现了一个非常有趣的国外MySQL Serverless平台,它叫做[PlanetScale](https://app.planetscale.com)。这个平台不仅仅是一个数据库,它能像代码一样轻松地创建开发和测试环境。你可以从主库中拉出一个与之完全相同结构的development或staging数据库,并在这个环境中进行开发和测试。所有的数据都是隔离的,不会相互干扰。
2023-07-12 14:34:56 10477 4
原创 Gorm Save更新踩坑记录|Gorm Save主键冲突|Duplicate entry ‘xxxx‘ for key ‘PRIMARY
在我最近使用Gorm进行字段更新的过程中,我遇到了一个问题。当我尝试更新status字段时,即使该字段的值没有发生变化,Gorm还是提示我“Duplicate entry 'xxxx' for key 'PRIMARY'”。
2023-06-03 17:10:11 4028 4
原创 Go 单元测试高效实践
敏捷开发中有一个广为人知的开发方法就是 XP(极限编程),XP 提倡测试先行,为了将以后出现 bug 的几率降到最低,这一点与近些年流行的 TDD(测试驱动开发)有异曲同工之处。在最开始做编程时,我总是忽略单元测试在代码中的作用,觉得编写单元测试的功夫都赶上甚至超越业务程序了。到后来,业务量越来越复杂,慢慢地,浮现一个问题,就是系统对于测试人员是一个黑盒,简单的测试无法保证系统所设计的东西都可以测试到。
2023-04-21 18:30:42 727 1
原创 将本地服务通过ssh代理给外部访问(如何使用 ssh 将本地服务代理给外部访问并保持 SSH 会话的连接性)
如何使用 ssh 将本地服务代理给外部访问并保持 SSH 会话的连接性。
2023-03-09 16:08:52 5244
原创 Google Cloud Storage CORS跨域允许,忽略访问控制来源标头
google storage origin 'https://xxx.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
2023-02-15 16:47:18 787
原创 在google设置静态页面 CDN加速
在google设置静态页面 CDN加速https://console.cloud.google.com/storage/browser https://console.cloud.google.com/net-services/cdn/listhttps://console.cloud.google.com/net-services/loadbalancing/list/loadBalancers
2023-02-14 11:25:58 862
原创 docker start :FAIL Hypervisor framework fails
mac 上启动 Docker 提示环境变量出错: FAIL: Hypervisor framework fails
2023-02-13 15:32:08 1286
转载 为什么mysql的delete操作不释放磁盘空间
在InnoDB中,delete操作并不会真的删除数据,mysql实际上只是给要删除的数据打了标记,标记为删除。磁盘所占空间不会变小,即表空间并没有真正被释放。
2023-02-02 11:05:51 2448
原创 nginx代理静态网站css解析异常
今天在使用ecs进行部署网页时,出现了一个问题。使用nginx代理到页面index.html路径下,同路径的资源都可以加载到,但是却无法正确加载到页面样式。打开f12,网络和控制台都没有资源异常,但页面乱成了一锅粥。本地打开是正常的,上到服务器却不行?之前使用nginx时,并没有这个问题,于是我猜测是不是nginx新的版本对配置参数进行了修改?但我翻看了nginx的文档,却没有找到。
2023-01-31 18:12:28 1238
原创 浅析鹅鸭杀中服务端的技术实现和要点
按照类型搜索房间时,玩过鹅鸭杀的玩家会有一个明显的感觉,就是一个房间内,玩家不准备,会更容易被推荐和进入;等级低的玩家创建的房间,进入速度往往远慢于高等级玩家创建的房间。每个玩家搜索到的房间,都是从人多到人少都有。鹅鸭杀有一个有趣的设定,登录后设置语言后,就同时设置了地区,匹配查询到的房间也都是同地区的。这里可以发现,鹅鸭杀的登录属于全球同服的架构,根据不同地区的网络路由到尽量近的登录服务,数据存放在一起。当 r ≥ R 时,表示发声者超出了最大范围,收听者无法听到声音。
2023-01-07 17:41:54 1928
原创 从typro到Obsidian
使用了typro 3年有餘,最近看到yukang的年終博客,又一次提到了Obsidian這個軟件。很久沒有還編輯工具的我,想要折騰一下。於是 馬上開始!第一步,啥也不知道,直接下載安裝瞅一瞅,說不定會非常簡單。然後就傻眼了,一整個VSCode的風格,設置裡關於同步的功能啥也沒有說… 然後我就去google “Obsidian 教程”,發現結果是亂七八糟的,要麼保姆到怎麼安裝,要麼是說gitte密鑰。但在看了幾個文章之後,我知道,一定是要通過Obsidan-git這個插件來和github進行連結的。但是Obs
2023-01-07 14:31:42 525
转载 git 加速代理设置,单仓库设置代理,指定仓库设置单独代理
相信这种方法大多人都使用过,当使用github的时候,需要开代理,但是使用国内的git仓库或者自建的git仓库的时候,代理反而成了累赘。部分转载自技术小黑屋:https://droidyue.com/blog/2022/10/26/speed-up-git-clone-via-proxy/有时候我们对 github 的仓库进行 clone 的时候,会发现很慢,甚至是龟速,很不够效率。上面的配置好,再次执行,基本上可以得到百倍的提效。我们通过检索 git 的帮助文档发现有这样的描述。
2023-01-05 11:28:00 2827
原创 最新版 Let’s Encrypt免费证书申请步骤,保姆级教程
最近将域名迁到了google domain,就研究了一下Let’s Encrypt的域名证书配置。发现网上找到的教程在官方说明中已经废弃,所以自己写一个流程记录一下。
2022-12-05 18:35:34 11180 1
原创 Jenkins启动失败:Failed to start LSB: Jenkins Automation Server.
ExecStop=/etc/rc.d/init.d/jenkins stop (code=exited, status=0/SUCCESS) ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=1/FAILURE) jenkins systemd[1]: Starting LSB: Jenkins Automation Server..
2022-12-02 14:56:51 2465
原创 Gradle重新安装后下载插件失败 Read timed out 问题解决
本地是可以拉取成功的,而本地从上面截图中地址下载一样是很慢的。经过两天的漫长折磨后,我开始寻找我本地安装gradle时,是否有什么设置。于是我想到我最开始使用gradle时,用过前同事的Gradle配置对本地gradle的配置进行过重写。在~/.gradle/init.gradle 文件中!!!
2022-12-02 14:45:37 4886
原创 go微服务框架Kratos简单使用总结
Kratos是B站开源的一款go的微服务框架,最近PS5上的 战神·诸神黄昏比较火,主角就是奎托斯。这个框架的名字就取自他。在进行框架选型时,对比了目前主流的很多go微服务框架,如Zero,最后对比之下,选择了Kratos,原因是Kratos给了开发人员更多的选择和更多的自由空间,方便自定义实现和选用很多东西,可以更快的适应已有的服务 以及 让开发者更快地上手使用(因为选用自己熟悉的工具)。
2022-11-15 17:09:49 8833
原创 服务端三种方式实现单设备登录
单设备登录,顾名思义,一个账号在一个app中只能在一个设备上进行登录。使用的场景例如:账号多端登录时云存档的一致性问题。
2022-09-27 20:14:29 2928
原创 Hash算法加密,BCrypt加密算法在java和go中的应用
为了信息安全,在工作中总免不了和加密算法打交道,相信大家多少都听过 MD5、SHA、BCrypt等算法。在接口加密、token校验、密码加密等等场景中,我们最熟悉的应该就是Hash算法这个名词了。hash是什么呢?密码又如何保证安全呢?如何用起来呢?本篇来进行一个简单通俗的解答。
2022-09-27 19:30:28 910
原创 正确地进行错误处理
http状态码是状态码,而不是错误码,是可以完全利用起来的。有的开发者认为,只要是预期内的错误,比如参数错误,都是可以用200返回的,然后在内部用isfailed来进行判断。目前国内的大小厂、第三方,都是统一返回200的,或许是出于一些业务考虑,可行,但并不一定最优。使用code在约定上会规范一些,更好统计。经过一些实践和积累,对错误处理进行阶段性的总结。结构体中,正确为统一一套结构体(业务返回)。预定义错误统一返回http状态码为400。其他(主要是500)为预期之外的异常。
2022-09-16 17:00:46 479
原创 go Jenkins流水线极速打包镜像上传
由于go本身打包机制良好,当依赖文件不多时,构建速度的优化可能并不明显,这时候我建议使用一体的Dockerfile直接构建,可以减少一些维护成本。在上述步骤中,第一步是打一个go的可执行文件,然后再构建一个linux环境。需要注意的是,以上的“go-1.18.6”是在Jenkins中进行安装时,起的名字,指向的是具体的插件,而不是这里填什么Jenkins下载什么。在上述构建中,最慢的步骤是go的打包,如果选择选用服务器安装go进行打包,再将打好的可执行文件直接构建成docker镜像,一定会快很多。
2022-09-08 18:18:15 1047
原创 Jenkins流水线极速打包
在java环境中使用gradle环境中的打包。需要注意的是,以上的“java8”和“gradle-6.5.1”都是在Jenkins中进行安装时,起的名字,指向的是具体的插件,而不是这里填什么Jenkins下载什么。在使用Jenkins流水线进行打包时,发现直接使用Dockerfile去构建一个java或者go程序会非常慢,go好一点也要一分钟,java则需要3分钟以上。在上述构建中,最慢的步骤是gradle的build,如果选择使用服务器进行打包,再将打好的jar包直接构建成docker镜像。
2022-09-07 18:40:00 1281
原创 提交代码触发Jenkins流水线更新
提交哪个构建哪个,或者某个指定分支提交才构建。jenkins自己的restful接口在权限认证上比较麻烦,所以我选择了Jenkins的插件generic-webhook-trigger使用下来感觉没有选错。
2022-09-07 18:39:18 661
LeetCodePractice.rar
2020-06-18
教你如何处理好毕业论文答辩开场白和结束语.doc
2020-05-14
欧美精选模板35款(可以参照答辩模板中的样式自行设置).rar
2020-05-14
apache-tomcat-8.5.42.rar
2020-02-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人