Go
文章平均质量分 78
go语言学习
西京刀客
AI,Crypto/Web3.
A bug bounty hunting and a lot of coding is my passion!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Go 语言中的 toolchain 指令-toolchain go1.23.6的作用和目的
Go 1.21引入的toolchain指令为模块系统提供精确版本控制。在go.mod中,"toolchain go1.23.6"明确指定构建所需的Go工具链版本,确保开发环境和CI/CD使用一致版本(go1.23.6),避免兼容性问题。该指令还能自动检查/下载指定版本,优化依赖解析,是现代化Go开发的重要实践。相比仅用"go 1.23.0",toolchain能精确到补丁版本,显著提升项目稳定性和可维护性,成为Go项目标准化的重要组成部分。原创 2026-01-31 08:20:37 · 668 阅读 · 0 评论 -
golang路由与框架选型(对比原生net/http、httprouter、Gin)
摘要:本文对比了Go语言中三种路由实现方案(原生net/http、httprouter和Gin框架)。Go 1.22+的原生net/http新增了方法匹配、路径参数等特性,适合高安全要求场景(如金融系统),具有最小依赖和可控性优势。httprouter基于前缀树实现,路由性能最优;Gin则提供完整开发体验,包含中间件、请求绑定等功能。建议根据场景选择:高性能网关用httprouter,业务系统用Gin,关键安全服务用原生net/http。实际可混合使用,通过微服务拆分兼顾性能与开发效率。原创 2026-01-11 21:46:27 · 966 阅读 · 0 评论 -
go语言-切片排序之sort.Slice 和 sort.SliceStable 的区别(数据库分页、内存分页场景注意点)
Go语言中sort.Slice和sort.SliceStable的主要区别在于排序稳定性。sort.Slice采用快速排序算法,性能更快但不保证相等元素的原始顺序;而sort.SliceStable使用归并排序,保持相等元素的相对顺序但性能稍慢。在需要分页或多级排序时应使用sort.SliceStable,并配合辅助排序字段确保确定性顺序。数据库排序也存在类似问题,仅靠单字段排序无法保证相同值记录的稳定顺序,必须添加唯一字段作为辅助排序条件才能实现跨请求的稳定分页。原创 2025-12-20 11:22:15 · 1228 阅读 · 0 评论 -
使用 grpcurl 通过命令行访问 gRPC 服务
grpcurl是一个命令行工具,用于与gRPC服务交互,支持发送请求、查看响应和调试服务。它需要服务器开启反射服务或提供.proto文件才能正常工作。安装方式包括brew、go install或直接下载二进制文件。常见问题包括TLS握手失败(需添加-plaintext参数)和反射API不支持(需提供.proto文件或在服务端启用反射)。生产环境不建议开启反射以避免安全风险,但开发环境推荐启用以提高调试效率。替代方案是建立Proto文件仓库供调试使用。原创 2025-11-28 07:22:32 · 1291 阅读 · 0 评论 -
什么是gRPC Metadata,使用场景是什么 | 拦截器 与 Metadata
gRPC Metadata是用于在客户端和服务端之间传输额外信息的键值对机制,类似于HTTP头。它主要用于传递非业务逻辑但系统运行必需的数据,如身份验证、全链路追踪、负载均衡和超时控制等场景。Metadata以key-value形式存储,key为字符串,value为字符串数组。在Go中通过context.Context传递,需显式操作metadata包进行读写。最佳实践是将metadata处理封装在拦截器中,实现业务逻辑与横切关注点的解耦。原创 2025-11-27 23:55:53 · 908 阅读 · 0 评论 -
golang如何四舍五入到2位小数
在Go语言中实现四舍五入到2位小数有三种主要方法:1) 使用fmt.Sprintf仅用于显示;2) 使用math.Round(v*100)/100获取float64结果,这是性能最优且最常用的方法;3) 对于金融等高精度场景,推荐使用shopspring/decimal等十进制库。其中math.Round方案具有性能好、精度可靠、代码简洁、社区认可度高和可扩展性强等优点,是常规场景下的最佳选择。原创 2025-09-26 22:28:49 · 696 阅读 · 0 评论 -
Golang中的NaN(Not a Number)
Go语言中的NaN表示无效浮点数,出现在0/0等非法运算中。NaN具有特殊性质:任何比较都返回false,包括与自身的比较。通过math.NaN()创建NaN值,使用math.IsNaN()进行检测。示例代码展示了NaN的创建、检测及其特殊比较行为,如NaN不等于自身。这些特性使NaN成为处理异常数值的有效机制。原创 2025-09-16 23:09:49 · 510 阅读 · 0 评论 -
构建 Go 可执行文件镜像 | 探索轻量级 Docker 基础镜像(我应该选择哪个 Docker 镜像?)
`golang:1.23.0-bullseye` 是官方 Go 镜像的一个 “build-stage” 版,用来构建 Go 可执行文件,而不是把它当成最终运行镜像。原创 2025-07-15 23:39:28 · 1423 阅读 · 0 评论 -
Provider模式:软件架构中的“供应商“设计哲学
在软件开发中,你是否遇到过这样的困扰:代码与特定的数据源、配置来源或服务紧密耦合,导致测试困难、扩展性差?Provider 模式正是解决这类问题的经典设计模式。原创 2025-07-14 21:05:22 · 1130 阅读 · 0 评论 -
Go语言中的组合式接口设计模式
在微服务架构和复杂业务系统中,我们经常需要调用多个外部服务或内部模块。传统的做法是将所有方法都放在一个大接口中,但这种设计会导致接口臃肿、职责不清。今天我们来探讨一种更优雅的设计模式:组合式接口设计。原创 2025-07-11 20:04:31 · 516 阅读 · 0 评论 -
Go语言json.Marshal多态机制
json.Marshal多态机制主要用于需要定制JSON输出的场景。这是它存在的根本原因和核心价值。原创 2025-06-12 07:54:09 · 797 阅读 · 0 评论 -
数据库只更新特定字段的两种方式(先读后写 vs. 动态组织 SQL)-golang SQLx 实现代码(动态组织 SQL)
数据库只更新特定字段的两种方式(先读后写 vs. 动态组织 SQL)-golang SQLx 实现代码(动态组织 SQL)原创 2025-05-31 10:26:13 · 1318 阅读 · 0 评论 -
go依赖查询工具之godepgraph(分析main.go的依赖树)
godepgraph is a program for generating a dependency graph of Go packages.原创 2025-05-15 22:40:55 · 941 阅读 · 0 评论 -
Go多服务项目结构优化:为何每个服务单独设置internal目录?
在实际开发生产型Go项目时,尤其是当项目采用微服务架构,往往会遇到以下挑战:如何合理划分每个服务的内部实现,防止跨服务依赖带来的混乱?如何做到服务内代码的“私有化”与责任边界清晰?原创 2025-05-10 23:34:27 · 1383 阅读 · 0 评论 -
golang常用库之-标准库text/template
`text/template`是Go语言标准库中的一个强大工具,用于生成文本输出。它允许你定义模板,然后将数据填充到模板中,非常适合生成报告、配置文件、HTML等。原创 2025-05-02 09:28:52 · 1109 阅读 · 0 评论 -
代码规范之Variable Names变量名
基本规则:**名称使用距离其声明越远,名称就必须越具有描述性。**对于方法接收器,一到两个字母就足够了。常见的变量,例如循环索引和读取器,可以用单个字母(i,r)。**更不常见的事物和全局变量需要更具描述性的名称。**原创 2025-03-26 07:08:25 · 656 阅读 · 0 评论 -
代码规范之空行思路和原则
这与其说是规则,**不如说是一个原则:如果不需要,就不要使用空行**。特别是,函数之间不要放置超过一两个空行,**避免以空行开始函数,不要以空行结束函数**,并且要谨慎使用空行。代码块中的空行就像散文中的段落分隔符:在视觉上将两个思想分开。原创 2025-03-26 06:47:25 · 785 阅读 · 0 评论 -
如何确保异步任务在 HTTP 返回后继续执行?context.WithoutCancel
context.WithoutCancel(ctx) 是一个非常方便的工具,尤其是在 Go 1.21 及以上版本中。**它可以直接创建一个不受父 context.Context 取消影响的子 context,同时继承父 ctx 中的所有值(如 traceID、requestID 等)。这样你既不需要手动提取和传递值,也不需要担心父 ctx 被取消后影响协程任务的执行**。原创 2025-03-24 23:43:34 · 1517 阅读 · 0 评论 -
golang将大接口传递给小接口以及场景
将大接口传递给小接口是一种非常灵活且强大的设计模式,广泛应用于很多场景中。通过这种方式,软件系统可以实现更好的解耦和可复用性,同时提高了系统的可维护性。理解并应用这一模式,对于提升 Go 语言开发的效率和质量是非常重要的。原创 2025-03-07 23:47:48 · 657 阅读 · 0 评论 -
golang常见面试题-基础篇
golang常见面试题原创 2024-11-10 23:01:24 · 1323 阅读 · 0 评论 -
go context之WithCancel、使用context取消goroutine执行
在 Go 语言的并发编程中,context.Context 对象提供了一种优雅的方式来管理和取消 goroutine 的生命周期。通过在多个 goroutine 中共享同一个 Context 对象,我们可以在任何一个 goroutine 中触发 Context 的取消操作,这个取消信号就会被传递到所有使用该 Context 的 goroutine 中。原创 2024-11-06 23:18:35 · 1303 阅读 · 0 评论 -
Go语言-big.Int
`math/big` 作为 Go 语言提供的进行大数操作的官方库。原创 2024-05-29 20:49:07 · 1039 阅读 · 1 评论 -
golang并发模型CSP(Communicating Sequential Processes)
不要通过共享内存来通信,而要通过通信来实现内存共享。原创 2024-05-15 11:18:25 · 766 阅读 · 0 评论 -
Go编程语言的调试器Delve | Goland远程连接Linux开发调试(go远程开发)
Golang 支持使用 gdb 来进行调试,这与 C 语言几乎是一致的。但 GDB 是一个通用性调试工具,不非常能直接地反映出 Golang 的特点,所以,推荐使用 delve(`https://github.com/go-delve/delve`),可以理解为是 Golang 版本的 GDB,使用方式大致与 gdb 一致。原创 2024-05-12 22:55:17 · 3159 阅读 · 1 评论 -
golang实现定时监控 CLOSE_WAIT 连接的数量
监控指定端口的连接状态,特别是关注 CLOSE_WAIT 连接的数量。CLOSE_WAIT 是指 TCP 连接关闭时,连接的一端等待关闭的另一端发送最后的确认信号。如果存在大量的 CLOSE_WAIT 连接,可能意味着网络连接没有正常关闭,可能会导致资源泄漏或其他问题。原创 2024-04-09 16:18:21 · 1230 阅读 · 0 评论 -
gRPC超时重传机制
gRPC 是在 HTTP/2 之上实现的 RPC 框架,HTTP/2 是第 7 层(应用层)协议,它运行在 TCP(第 4 层 - 传输层)协议之上,相比于传统的 REST/JSON 机制有诸多的优点。原创 2024-04-08 13:06:53 · 1950 阅读 · 0 评论 -
golang常用库之-golang常用库之-ladon包 | 基于策略的访问控制
基于策略的访问控制-ladonhttps://github.com/ory/ladonLadon是保护您资源的蛇龙。Ladon是一个库,用于访问控制策略,类似于基于角色的访问控制或访问控制列表。与ACL和RBAC相比,您可以获得细粒度的访问控制,并能够在复杂环境中回答问题,例如多租户或分布式应用程序和大型组织。Ladon受到AWS IAM Policies 的启发。原创 2024-03-17 20:18:44 · 1227 阅读 · 0 评论 -
golang常用库之-操作数据库ORM:GORM 包介绍 | 一些 GORM 提示和注意事项
GORM 是 Go 语言的 ORM 包,功能强大,调用方便。像腾讯、华为、阿里这样的大厂,都在使用 GORM 来构建企业级的应用。原创 2024-02-10 20:08:36 · 3357 阅读 · 1 评论 -
什么是数据库软删除,什么场景下要用软删除?(go GORM硬删除)
使用的是 GORM,默认启用了软删除功能,即通过将 deleted_at 字段设置为非空来标记删除的记录。这就是为什么在执行 db.Delete(&image) 后,实际上只是更新了 deleted_at 字段而不是真正删除记录。原创 2024-02-07 16:29:55 · 1930 阅读 · 1 评论 -
golang常用库之-disintegration/imaging图片操作(生成缩略图)
imaging 是一个 Go 语言的图像处理库,它提供了一组功能丰富的函数和方法,用于进行各种图像处理操作。原创 2024-02-06 09:06:59 · 2138 阅读 · 2 评论 -
什么是协程goroutine?
Goroutine 是一个由 Go 运行时管理的轻量级线程,一般称其为 “协程”。操作系统本身是无法明确感知到 Goroutine 的存在的,Goroutine 的操作和切换归属于 “用户态” 中。Goroutine 由特定的调度模式来控制,以 “多路复用” 的形式运行在操作系统为 Go 程序分配的几个系统线程上。原创 2024-01-29 17:14:28 · 1091 阅读 · 0 评论 -
链路追踪-调用链跟踪-Jaeger
链路跟踪在微服务为我们提供了模块分,低耦合的高效开发和DevOPS中,具体业务中当一个请求中,请求了多个服务单元,如果请求出现了错误或异常,很难去定位是哪个服务出了问题,这时就需要链路追踪。可能你会想在业务系统中请求中埋点,或写日志,但是这种都需要在业务代码中来写,而且耦合在代码中,不具备微服务的扩张性后后期的易维护行。JaegerJaeger-分布式调用链跟踪系统理论与实战参考URL: https://blog.csdn.net/zuiyijiangnan/article/details/1038原创 2024-01-26 18:35:55 · 2566 阅读 · 0 评论 -
golang常用库之-golang-jwt/jwt包
golang-jwt/jwt 是一个在 Go 语言中使用 JSON Web Tokens(JWT)进行身份验证和授权的库。JWT 是一种用于在跨网络进行安全通信的开放标准(RFC 7519),它使用一个 JSON 对象来表示被声明的安全性信息。原创 2024-01-23 09:24:33 · 1399 阅读 · 0 评论 -
Golang条件编译 | 获取系统的磁盘空间内存占用demo | gopsutil/disk库(跨平台方案)
Go中获取磁盘空间信息,你可以使用第三方库 `github.com/shirou/gopsutil/disk` 这个库提供了一个跨平台的方法来获取磁盘的使用情况。原创 2024-01-11 21:11:01 · 2114 阅读 · 1 评论 -
golang常用库之-操作sqlite数据库
SQLite 是一个开源的嵌入式关系数据库,实现了自给自足的、无服务器的、配置无需的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库系统不同,比如 MySQL、PostgreSQL 等,SQLite 不需要在系统中设置和管理一个单独的服务。这也使得 SQLite 是一种非常轻量级的数据库解决方案,非常适合小型项目、嵌入式数据库或者测试环境中。原创 2023-12-01 21:26:22 · 3960 阅读 · 2 评论 -
syslog快速开始
Syslog 协议最初由 Eric Allman 编写,并在 RFC 3164 中定义。消息通过 IP 网络发送到事件消息收集器或系统日志服务器。Syslog 使用用户数据报协议 (UDP) 端口 514进行通信。虽然,系统日志服务器不会发回收到消息的确认。自 2009 年以来,系统日志已由 IETF 在RFC 5424 中标准化。原创 2023-11-18 21:00:34 · 1369 阅读 · 2 评论 -
监控系统-Prometheus(普罗米修斯)(三) Prometheus中的指标(Metrics)
Prometheus整体架构分为Server端和Exporter端,而Exporter通常是基于官方的SDK开发(例如Go SDK)。原创 2023-10-23 20:15:05 · 6763 阅读 · 0 评论 -
华为云云耀云服务器L实例评测|华为云上安装监控服务Prometheus三件套安装
Prometheus监控系统常见的组合方式是Prometheus + Alertmanager + Grafana,也就是所谓的Prometheus三件套。原创 2023-09-15 20:36:59 · 1095 阅读 · 2 评论 -
AEAD(Authenticated Encryption with Associated Data) 认证加密之 AES-GCM
结论:AEAD模式是一个密码学的规范和标准。它定义了一种同时提供认证和加密的算法模式,已经被广泛采用于各种主流的安全通讯协议和标准中。原创 2023-06-09 09:12:23 · 9637 阅读 · 0 评论 -
go编写python拓展模块(python如何调用go语言的模块)
将 Go 源文件直接编译成 Python 扩展模块,当然这要求在使用 CGO 的时候**需要遵循 Python 提供的 C API**原创 2023-06-06 11:31:25 · 1472 阅读 · 2 评论
分享