自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ch3nnn的博客

折腾不息 · 乐此不疲 _个人博客: ch3nnn.cn

  • 博客(377)
  • 资源 (2)
  • 收藏
  • 关注

原创 个人博客: ch3nnn.cn

https://ch3nnn.cn/

2020-12-18 11:48:04 469

原创 Go 编程风格指南 - 最佳实践

使用日志分级(log.V)对你有利。分级的日志对开发和追踪很有用。建立一个关于粗略程度的约定是有帮助的。比如说。在V(1)写少量的额外信息在V(2)中跟踪更多信息在V(3)中倾倒大量的内部状态。为了尽量减少粗略记录的成本,你应该确保即使在log.V关闭的情况下也不要意外地调用昂贵的函数。log.V提供两个API。更方便的那个带有这种意外支出的风险。如有疑问,请使用稍显粗略的风格。

2024-06-03 11:07:03 586

原创 Go Sync并发包之errgroup

errgroup 软件包可让您同时处理多项任务。通过它,可以轻松地以安全的方式一起运行,保持同步,处理错误,并控制何时停止 goroutines。// 获取用户详细信息return nil})// 获取用户活动return nil})// 获取用户登录详细信息return nil})// 等待所有goroutines完成并返回第一个错误 (如果有)因此,errgroup 的工作就是运行这些任务,并通过g.Wait()等待任务结束,我们需要做的就是添加任务。

2024-04-24 11:09:50 777

转载 简单易用的任务队列-beanstalkd

beanstalkd 是一个简单快速的分布式工作队列系统,协议基于 ASCII 编码运行在 TCP 上。其最初设计的目的是通过后台异步执行耗时任务的方式降低高容量 Web 应用的页面延时。其具有简单、轻量、易用等特点,也支持对任务优先级、延时/超时重发等控制,同时还有众多语言版本的客户端支持,这些优点使得它成为各种需要队列系统场景的一种常见选择。

2024-03-05 17:22:05 97

转载 Golang append是并发安全的吗

Golang append并不是并发安全的,我相信使用过Golang的同学大部分都是知道的,但是他有概率会导致服务crash,这才是更大的风险。

2024-02-28 14:10:05 215 1

原创 Golang 更严格的代码格式化工具 gofumpt

gofmt 是 golang 自带的代码自动格式化工具,是保证 Go 代码风格一致的大杀器。我们这次要推荐的 gofumpt 在 gofmt 的基础上添加了一系列更加严格的格式化规则,并保证了对gofmt 的兼容。gofumpt(https://github.com/mvdan/gofumpt) fork 自 gofmt,支持与 gofmt 几乎相同的命令行参数,因此可以作为 gofmt 的直接替代品使用。gofumpt 是。

2024-02-19 20:33:18 938

原创 prometheus node-exporter 全部指标说明

Kswapd_high_wmark_hit_quickly - 剩余内存达到 high 的水位线的时间 /proc/vmstat kswapd_high_wmark_hit_quickly。Kswapd_low_wmark_hit_quickly - - 剩余内存达到 low 的水位线的时间 /proc/vmstat kswapd_low_wmark_hit_quickly。

2024-01-19 10:00:02 1317

转载 基于微服务的错误码设计

基于微服务的错误码设计

2024-01-11 13:56:57 136

原创 使用 go-elasticsearch v8 基本请求

使用 go-elasticsearch 请求示例找到简单的示例,所以我认为先看看这个是个好主意。连接客户端有两种方式,如下图。至于两者的特点,TypedClient有类型,更容易编写,但文档较少。另外,批量索引不支持TypedClient。由于普通客户端都是基于json的,所以我觉得从文档转换到代码还是比较容易的。我的建议基本上是使用 TypedClient!

2024-01-02 16:19:14 1051

原创 Go 代码检查工具 golangci-lint

是一个代码检查工具的集合,聚集了多种 Go 代码检查工具,如golintgo vet等。运行速度快可以集成到 vscode、goland 等开发工具中包含了非常多种代码检查器可以集成到 CI 中这是包含的代码检查器列表:Linters。

2023-12-22 11:50:03 1725 1

转载 MySQL 数据库中的数据类型

而 VARCHAR 类型的长度是可变的,其最大值可以取 0 ~ 65535 之间的任意值,VARCHAR 类型实际占用的空间为字符串的实际长度加一,这样可以有效节约系统的空间。例如,BIT(4) 就是指定数据类型为 BIT 类型,长度为 4,若存储的数据是 0 ~ 15,因为变成二进制后的 15 的值为 1111,则其长度为 4。参数和 ENUM 一致,SET 类型的值可以取列表中的一个或多个元素,取多个元素时,不同元素之间用逗号隔开,SET 类型的值最多只能是由 64 个元素构成的组合。

2023-11-22 11:50:33 125

转载 Golang常用库:字段参数验证库-validator使用

这个验证包 github.com/go-playground/validator 验证功能非常多。用户自定义函数验证字段是否合法,效验是否正确。import ("fmt"Name string `form:"name" json:"name" validate:"required,CustomerValidation"` //注意:required和CustomerValidation之间不能有空格,否则panic。CustomerValidation:自定义tag-函数标签。

2023-11-05 22:56:27 891

转载 使用 grpcurl 通过命令行访问 gRPC 服务

用这个工具做一些简单的测试还是相当方便的,上手也简单。只要掌握文中提到的几条命令,基本可以涵盖大部分的测试需求了。

2023-10-23 20:00:00 260

转载 单体仓库与多仓库都有哪些优势劣势,微服务选择哪种方案比较好?

微服务架构并不是主张所有的东西都要独立自治,至少代码仓库就可以集中管理,不要让先入为主的观念影响你的判断,根据实际需要选择最合适的方案。初创公司的话,在公司早期并且服务不是特别多的情况下,采用单体仓库比较合适。这样也容易养成团队统一的代码风格,过早的分而治之容易导致团队各自为战,代码风格散乱等问题。

2023-10-17 15:44:10 352

转载 在 Go 使用 embed 当中嵌入父目录中的文件

自 Go 1.16 版本开始,Go 提供了将二进制文件打包进入到 Binary 文件当中的机制:`//go:embed。不过,我看到的示例大多数都是嵌入当前文件夹下的子文件夹的示例。并没有嵌入父一级文件夹的示例。于是,我便开始研究起来。

2023-10-07 09:31:55 607

原创 Golang-GJSON 快速而简单的方法来从 json 文档获取值

GJSON 是一个 Go 包,它提供了一种快速而简单的方法来从 json 文档获取值。它具有单行搜索、点符号路径、迭代和解析 json 行等功能。GJSON也可用于和。

2023-09-05 18:03:16 1187

原创 Golang-使用 gvm 进行版本控制

当你想为每个项目切换 go 版本时,gvm (Go Version Manager) 很方便。这里,我将介绍“如何在Mac上安装gvm”和“如何使用gvm”

2023-08-14 19:30:00 1441

原创 Golang-语言源码级调试器 Delve

GDB最早期的调试工具,现在用的很少。LLDBmacOS 系统推荐的标准调试工具,单 Go 的一些专有特性支持的比较少。Delve专门为 Go 语言打造的调试工具,使用最为广泛。本篇简单说明如何使用Delve工具来调试 Go 程序,使用的delve版本为 1.20.1。delve 的汉语意思是:钻研、探索;用这个来命名一个debug工具还是非常的形象。

2023-08-11 15:38:22 862 1

原创 go mod vendor 依赖管理命令

在 Go 1.11 版本之前,Go 语言使用 GOPATH 环境变量来管理项目的依赖。但是从 Go 1.11 版本开始,引入了 Go Modules 的概念,可以更方便地管理项目的依赖关系。当你的项目使用 Go Modules 进行依赖管理时,可以使用r 命令将项目依赖的模块复制到vendor目录下。这样做的好处是,可以将项目所需的依赖模块与项目代码一起打包,使得项目更加独立和可移植。

2023-07-26 01:11:21 1959

原创 Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。

2023-07-01 19:32:28 827

转载 「Go开源包」chromedp:一个基于Chrome DevTools协议的库,支持数据采集、截取网页长图

chromedp基于Chrome DevTool协议实现。可以对网页内容进行采集、模拟点击、提交数据、将网页内容转换成pdf、抓取网页长图等功能。

2023-06-28 10:53:14 2359

转载 Golang-Ent ORM框架

面向对象编程和关系型数据库,都是目前最流行的技术,但是它们的模型是不一样的。面向对象编程把所有实体看成对象(object),关系型数据库则是采用实体之间的关系(relation)连接数据。很早就有人提出,关系也可以用对象表达,这样的话,就能使用面向对象编程,来操作关系型数据库。简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。ORM 把数据库映射成对象。

2023-06-26 14:27:00 1682

转载 探究|Go JSON 三方包哪家强?

综上,业务选型上需要根据具体情况、不同领域的业务使用场景和发展趋势进行选择,综合考虑各方面因素。最适配业务的才是最好的!例如:如果业务只是简单的解析 http 请求返回的 json 串的部分字段,并且字段都是确定的,偶尔需要搜索功能,那 Gjson 是很不错的选择。不太推荐使用 Jsoniter 库,原因在于: Go 1.8 之前,官方 Json 库的性能就收到多方诟病。不过随着 Go 版本的迭代,标准 json 库的性能也越来越高,Jsonter 的性能优势也越来越窄。

2023-06-14 09:55:38 270

转载 Go工程化 - 依赖注入

在微服务框架的默认项目模板中使用了进行依赖注入,也建议开发者在维护项目时使用该工具。wire 乍看起来比较违反直觉,导致很多同学不理解为什么要用或不清楚如何用(也包括曾经的我),本文来帮助大家理解 wire 的使用。

2023-06-12 14:38:31 233

转载 Golang-依赖注入最佳指南

依赖注入是一种设计模式,用于管理对象之间的依赖关系。依赖注入的核心思想是将对象的依赖关系从代码中分离出来,从而使代码更加灵活和可维护。在依赖注入中,对象不再负责创建它所依赖的对象,而是由外部容器来负责创建和管理对象之间的依赖关系。可以更轻松地推理代码中的数据流,因为依赖项显式传递给函数或构造函数。管理依赖项可能更容易,尤其是在较小的代码库中。测试依赖于手动依赖项注入的代码可能更容易,尤其是在依赖项彼此松散耦合的情况下。在整个代码库中手动实例化和注入依赖项可能很乏味且容易出错。

2023-06-02 09:41:29 1855

转载 Golang-GEN 自动生成 GORM 模型结构体文件及使用示例

GEN 是一个基于 GORM 的安全 ORM 框架, 由字节跳动无恒实验室与 GORM 作者联合研发,主要功能说白了就是帮助生成数据表对应的模型文件和更安全方便地执行SQL。

2023-05-29 17:49:25 3632

原创 Golang-循环变量作用域针对那些数据类型会出现问题

这个代码的输出结果是 “321”,因为 defer 语句在函数返回前执行,所以闭包捕获的都是同一个循环变量的地址。这个代码的输出结果是 “321”,因为 defer 语句在函数返回前执行,所以协程捕获的都是同一个循环变量的地址。输出结果为 “333”,这是因为函数字面量捕获的是变量 i 的地址,而 i 的值在循环结束后一直是 3。输出结果是 “012”,这是因为指针类型数据结构保存的是 j 的地址,每个元素访问的是自己所指向的值。输出结果为 “333”,因为协程访问的是循环变量的地址,而不是值。

2023-05-23 09:52:06 386

转载 Golang-使用 Hertz 框架和 Gorm 快速搭建 Web 服务

在之前的文章中咱们运用 Hertz 编写了一个简略的 demo 协助快速上手 Hertz 这款 Golang HTTP 结构,本节咱们将加入 Gorm 结构和 Hertz 结构一起学习一个简略的官方 demo,同时带你了解 Hertz 一些有意思的特性。假如你还不知道 Hertz 是什么,那么能够查看我之前的文章快速上手。运用 thrift IDL 界说 HTTP 接口运用hz生成脚手架代码运用Hertz的参数绑定校验运用Gorm和MySQL编写耐久层这就是本文的全部内容。

2023-05-11 17:00:52 774 2

转载 Golang-使用 goroutine 运行闭包的“坑”

在 Go 语言中,函数支持匿名函数,闭包就是一种特殊的匿名函数,它可以用于访问函数体外部的变量。需要注意的是,在中,使用goroutine执行闭包时,经常会掉“坑”。因为匿名函数可以访问函数体外部的变量,而返回的val 的值是引用的同一个内存地址的数据,所以匿名函数访问的函数体外部的 val 值是循环中最后输出的一个值。本文我们介绍了在中,Go 语言在每次迭代时没有定义一个新变量,导致使用 goroutine 运行闭包时,经常会掉“坑”。我们给出避免“踩坑”的两种方法,其中,第二种方法更简单。

2023-05-11 10:28:13 153

原创 Golang-如何判断一个 interface{} 的值是否为 nil ?

Go 会先将 nil 转换为interface (type=nil, data=nil) ,这与 b (type=*string, data=nil) 虽然 data 是一样的,但 type 不相等,因此他们并不相等。进行判断时,其实右边的 nil 并非单纯的是我们所理解的值为nil,而正确的理解应该是 type 为 nil 且 value 也为 nil。当一个 interface 的 type 和 data 都处于 unset 状态的时候,那么该 interface 的类型和值都为 nil。

2023-05-10 16:38:22 1234

原创 Golang-常见数据结构Map

开放寻址法中对性能影响最大的就是装载因子,它是数组中元素的数量与数组大小的比值,随着装载因子的增加,线性探测的平均用时就会逐渐增加,这会同时影响哈希表的读写性能,当装载率超过 70% 之后,哈希表的性能就会急剧下降,而一旦装载率达到 100%,整个哈希表就会完全失效,这时查找任意元素都需要遍历数组中全部的元素,所以在实现哈希表时一定要时刻关注装载因子的变化。如上图所示,当 Key3 与已经存入哈希表中的两个键值对 Key1 和 Key2 发生冲突时,Key3 会被写入 Key2 后面的空闲内存中;

2023-04-30 10:26:21 1307

原创 Golang-常见数据结构Slice

切片是对底层数组的一个抽象,描述了它的一个片段。切片实际上是一个结构体,它有三个字段:长度,容量,底层数据的地址。多个切片可能共享同一个底层数组,这种情况下,对其中一个切片或者底层数组的更改,会影响到其他切片。append 函数会在切片容量不够的情况下,调用 growslice 函数获取所需要的内存,这称为扩容,扩容会改变元素原来的位置。扩容策略并不是简单的扩为原切片容量的 2 倍或 1.25 倍,还有内存对齐的操作。扩容后的容量 >= 原容量的 2 倍或 1.25 倍。

2023-04-30 10:23:23 914

原创 一份 Go 开发者学习路线图

Go 开发者路线图

2023-04-25 09:58:34 211

原创 微服务架构下认证和鉴权理解

本文介绍了服务在从单体演进到微服务架构过程中,对于服务认证鉴权遇到的问题,并提供了开发人员可能会用到的解决方案。如今微服务架构已经成为事实上的标准,我们希望微服务一定是无状态的,专注于处理业务流程和规则,而鉴权认证的逻辑应交给专门的技术组件来负责,因此让网关来统一处理鉴权是一个更优雅的方案。

2023-04-18 16:04:27 1116

转载 APISIX-全新一代API网关,带可视化管理,文档贼友好!

apisix是一款云原生微服务API网关,可以为API提供终极性能、安全性、开源和可扩展的平台。apisix基于Nginx和etcd实现,与传统API网关相比,apisix具有动态路由和插件热加载,特别适合微服务系统下的API管理。体验了一把apisix这个全新一代的API网关,有可视化管理的网关果然不一样,简单易用,功能强大!如果你的微服务是云原生的话,可以试着用它来做网关。其实apisix并不是个小众框架,很多国内外大厂都在使用了,如果你想知道哪些公司在使用,可以参考下面的连接。

2023-04-18 15:56:13 2851 3

转载 Golang 简洁架构实战

以上就是我对 golang 的项目中发现问题的一点点总结与思考,思考的先不管对不对,总归是解决了我们当下的一些问题。不过,项目总归是需要不断重构完善的,所以下次有问题的时候下次再改呗。对于我上面的总结和描述感觉有不对的地方,请随时指出来一起讨论。

2023-04-17 09:41:55 319

原创 go-zero 微服务集成 consul 注册发现和配置中心

最近在开发学习go-zero时发现基于ETCD做服务发现, 做配置中心相关资料较少, 需要做二次开发. 也调研尝试了一些注册发现组件 consul 和 nacos 等, 从资源使用上 consul 相对占用资源小太多了. 比较 nacos 是阿里基于 java 开源的.

2023-04-14 14:29:19 864

原创 微服务-服务的注册与发现(Consul、zookeeper、etcd、eureka、Nacos)

Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent。传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。2. spring-cloud-alibaba支持。支持 long polling/大部分增量。支持 long polling/大部分增量。全量/支持long polling。(弱)长连接,keepalive。支持 long polling。支持http和dns。https支持(弱)

2023-04-12 22:15:25 904

原创 微服务-微服务为什么要用到 API 网关

微服务架构(通常简称为微服务)是指开发应用所用的一种架构形式。通过微服务,可将大型应用分解成多个独立的组件,其中每个组件都有各自的责任领域。在处理一个用户请求时,基于微服务的应用可能会调用许多内部微服务来共同生成其响应。微服务是互联网业务发展的结果,互联网业务的飞速发展导致系统的架构也在不断地发生变化,总体来说,系统的架构大致经历了:单体应用架构—>SOA 架构—>微服务架构 的演变,具体发展历程和各自的优缺点如下表所示。因此,微服务是互联网发展的必然结果,很多传统公司的系统架构也在逐步微服务化。

2023-04-12 22:13:52 1487

转载 800 字彻底理解 Go 指针

简单点说,指针是指向另一个地址的值。这是教科书上的解释,但如果你转自一门不用谈论变量地址的开发语言时,这个解释看上去犹如一串楔形文字,难以理解。让我们分解一下。计算机内存,即 RAM,可以被看作是一串盒子,一个接一个地排成一行。每个盒子(或者称为单元格)都标有一个惟一的数字,数字按顺序递增;这是单元格的地址,其所在的内存位置。每一个单元格存储一个值。如果你知道某个单元格的内存地址,就可以访问该单元格并读取里面的内容。或者用另外一个值替换该单元格内之前的值。

2023-03-20 18:05:41 239

DeskPins v1.32.rar

该软件是更实用的窗口打顶工具。有时,当我们在打字或玩游戏时在计算机上观看电影时,通常会有打字窗口和游戏挡住电影的窗口。缩小电影的窗口和要观看的游戏的窗口,但有时您看不到电影,这很麻烦。此时,该软件可以派上用场,只要用户将要顶的窗口放在不影响其使用的位置,那么无论是玩游戏还是打字,它都不会影响他的观看经验,非常实用。

2020-03-26

ShareMouseSetup.exe

ShareMouse让你一套键盘鼠标就能控制多台电脑,非常适合多屏幕处理工作的朋友使用,你只需要移动鼠标指针的到想控制的显示器那里去、鼠标光标就会神奇地“跨越”到邻近的电脑屏幕上。

2020-03-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除