
Go
文章平均质量分 78
go语言学习
西京刀客
AI,Crypto/Web3.
A bug bounty hunting and a lot of coding is my passion!
展开
-
代码规范之Variable Names变量名
基本规则:**名称使用距离其声明越远,名称就必须越具有描述性。**对于方法接收器,一到两个字母就足够了。常见的变量,例如循环索引和读取器,可以用单个字母(i,r)。**更不常见的事物和全局变量需要更具描述性的名称。**原创 2025-03-26 07:08:25 · 303 阅读 · 0 评论 -
代码规范之空行思路和原则
这与其说是规则,**不如说是一个原则:如果不需要,就不要使用空行**。特别是,函数之间不要放置超过一两个空行,**避免以空行开始函数,不要以空行结束函数**,并且要谨慎使用空行。代码块中的空行就像散文中的段落分隔符:在视觉上将两个思想分开。原创 2025-03-26 06:47:25 · 401 阅读 · 0 评论 -
如何确保异步任务在 HTTP 返回后继续执行?context.WithoutCancel
context.WithoutCancel(ctx) 是一个非常方便的工具,尤其是在 Go 1.21 及以上版本中。**它可以直接创建一个不受父 context.Context 取消影响的子 context,同时继承父 ctx 中的所有值(如 traceID、requestID 等)。这样你既不需要手动提取和传递值,也不需要担心父 ctx 被取消后影响协程任务的执行**。原创 2025-03-24 23:43:34 · 1062 阅读 · 0 评论 -
golang将大接口传递给小接口以及场景
将大接口传递给小接口是一种非常灵活且强大的设计模式,广泛应用于很多场景中。通过这种方式,软件系统可以实现更好的解耦和可复用性,同时提高了系统的可维护性。理解并应用这一模式,对于提升 Go 语言开发的效率和质量是非常重要的。原创 2025-03-07 23:47:48 · 498 阅读 · 0 评论 -
golang常见面试题-基础篇
golang常见面试题原创 2024-11-10 23:01:24 · 974 阅读 · 0 评论 -
go context之WithCancel、使用context取消goroutine执行
在 Go 语言的并发编程中,context.Context 对象提供了一种优雅的方式来管理和取消 goroutine 的生命周期。通过在多个 goroutine 中共享同一个 Context 对象,我们可以在任何一个 goroutine 中触发 Context 的取消操作,这个取消信号就会被传递到所有使用该 Context 的 goroutine 中。原创 2024-11-06 23:18:35 · 1012 阅读 · 0 评论 -
Go语言-big.Int
`math/big` 作为 Go 语言提供的进行大数操作的官方库。原创 2024-05-29 20:49:07 · 782 阅读 · 1 评论 -
golang并发模型CSP(Communicating Sequential Processes)
不要通过共享内存来通信,而要通过通信来实现内存共享。原创 2024-05-15 11:18:25 · 429 阅读 · 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 · 2031 阅读 · 1 评论 -
golang实现定时监控 CLOSE_WAIT 连接的数量
监控指定端口的连接状态,特别是关注 CLOSE_WAIT 连接的数量。CLOSE_WAIT 是指 TCP 连接关闭时,连接的一端等待关闭的另一端发送最后的确认信号。如果存在大量的 CLOSE_WAIT 连接,可能意味着网络连接没有正常关闭,可能会导致资源泄漏或其他问题。原创 2024-04-09 16:18:21 · 1076 阅读 · 0 评论 -
gRPC超时重传机制
gRPC 是在 HTTP/2 之上实现的 RPC 框架,HTTP/2 是第 7 层(应用层)协议,它运行在 TCP(第 4 层 - 传输层)协议之上,相比于传统的 REST/JSON 机制有诸多的优点。原创 2024-04-08 13:06:53 · 1336 阅读 · 0 评论 -
golang常用库之-golang常用库之-ladon包 | 基于策略的访问控制
基于策略的访问控制-ladonhttps://github.com/ory/ladonLadon是保护您资源的蛇龙。Ladon是一个库,用于访问控制策略,类似于基于角色的访问控制或访问控制列表。与ACL和RBAC相比,您可以获得细粒度的访问控制,并能够在复杂环境中回答问题,例如多租户或分布式应用程序和大型组织。Ladon受到AWS IAM Policies 的启发。原创 2024-03-17 20:18:44 · 961 阅读 · 0 评论 -
golang常用库之-操作数据库ORM:GORM 包介绍 | 一些 GORM 提示和注意事项
GORM 是 Go 语言的 ORM 包,功能强大,调用方便。像腾讯、华为、阿里这样的大厂,都在使用 GORM 来构建企业级的应用。原创 2024-02-10 20:08:36 · 2755 阅读 · 1 评论 -
什么是数据库软删除,什么场景下要用软删除?(go GORM硬删除)
使用的是 GORM,默认启用了软删除功能,即通过将 deleted_at 字段设置为非空来标记删除的记录。这就是为什么在执行 db.Delete(&image) 后,实际上只是更新了 deleted_at 字段而不是真正删除记录。原创 2024-02-07 16:29:55 · 1566 阅读 · 1 评论 -
golang常用库之-disintegration/imaging图片操作(生成缩略图)
imaging 是一个 Go 语言的图像处理库,它提供了一组功能丰富的函数和方法,用于进行各种图像处理操作。原创 2024-02-06 09:06:59 · 1580 阅读 · 2 评论 -
什么是协程goroutine?
Goroutine 是一个由 Go 运行时管理的轻量级线程,一般称其为 “协程”。操作系统本身是无法明确感知到 Goroutine 的存在的,Goroutine 的操作和切换归属于 “用户态” 中。Goroutine 由特定的调度模式来控制,以 “多路复用” 的形式运行在操作系统为 Go 程序分配的几个系统线程上。原创 2024-01-29 17:14:28 · 908 阅读 · 0 评论 -
链路追踪-调用链跟踪-Jaeger
链路跟踪在微服务为我们提供了模块分,低耦合的高效开发和DevOPS中,具体业务中当一个请求中,请求了多个服务单元,如果请求出现了错误或异常,很难去定位是哪个服务出了问题,这时就需要链路追踪。可能你会想在业务系统中请求中埋点,或写日志,但是这种都需要在业务代码中来写,而且耦合在代码中,不具备微服务的扩张性后后期的易维护行。JaegerJaeger-分布式调用链跟踪系统理论与实战参考URL: https://blog.youkuaiyun.com/zuiyijiangnan/article/details/1038原创 2024-01-26 18:35:55 · 1801 阅读 · 0 评论 -
golang常用库之-golang-jwt/jwt包
golang-jwt/jwt 是一个在 Go 语言中使用 JSON Web Tokens(JWT)进行身份验证和授权的库。JWT 是一种用于在跨网络进行安全通信的开放标准(RFC 7519),它使用一个 JSON 对象来表示被声明的安全性信息。原创 2024-01-23 09:24:33 · 1042 阅读 · 0 评论 -
Golang条件编译 | 获取系统的磁盘空间内存占用demo | gopsutil/disk库(跨平台方案)
Go中获取磁盘空间信息,你可以使用第三方库 `github.com/shirou/gopsutil/disk` 这个库提供了一个跨平台的方法来获取磁盘的使用情况。原创 2024-01-11 21:11:01 · 1842 阅读 · 1 评论 -
golang常用库之-操作sqlite数据库
SQLite 是一个开源的嵌入式关系数据库,实现了自给自足的、无服务器的、配置无需的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库系统不同,比如 MySQL、PostgreSQL 等,SQLite 不需要在系统中设置和管理一个单独的服务。这也使得 SQLite 是一种非常轻量级的数据库解决方案,非常适合小型项目、嵌入式数据库或者测试环境中。原创 2023-12-01 21:26:22 · 3245 阅读 · 2 评论 -
syslog快速开始
Syslog 协议最初由 Eric Allman 编写,并在 RFC 3164 中定义。消息通过 IP 网络发送到事件消息收集器或系统日志服务器。Syslog 使用用户数据报协议 (UDP) 端口 514进行通信。虽然,系统日志服务器不会发回收到消息的确认。自 2009 年以来,系统日志已由 IETF 在RFC 5424 中标准化。原创 2023-11-18 21:00:34 · 871 阅读 · 2 评论 -
监控系统-Prometheus(普罗米修斯)(三) Prometheus中的指标(Metrics)
Prometheus整体架构分为Server端和Exporter端,而Exporter通常是基于官方的SDK开发(例如Go SDK)。原创 2023-10-23 20:15:05 · 4734 阅读 · 0 评论 -
华为云云耀云服务器L实例评测|华为云上安装监控服务Prometheus三件套安装
Prometheus监控系统常见的组合方式是Prometheus + Alertmanager + Grafana,也就是所谓的Prometheus三件套。原创 2023-09-15 20:36:59 · 755 阅读 · 2 评论 -
AEAD(Authenticated Encryption with Associated Data) 认证加密之 AES-GCM
结论:AEAD模式是一个密码学的规范和标准。它定义了一种同时提供认证和加密的算法模式,已经被广泛采用于各种主流的安全通讯协议和标准中。原创 2023-06-09 09:12:23 · 7533 阅读 · 0 评论 -
go编写python拓展模块(python如何调用go语言的模块)
将 Go 源文件直接编译成 Python 扩展模块,当然这要求在使用 CGO 的时候**需要遵循 Python 提供的 C API**原创 2023-06-06 11:31:25 · 1046 阅读 · 2 评论 -
golang gRPC:根据.protobuf文件生成go代码
在最新版本的Protocol Buffer编译器中,--go-grpc_out选项已经取代了--go_out=plugins=grpc选项,并且成为了生成gRPC服务端和客户端代码的推荐选项。原创 2023-03-30 23:15:00 · 4673 阅读 · 0 评论 -
golang常用库之-web框架搭建restful api服务 gin-gonic/gin
Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确。对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错。框架更像是一些常用函数或者工具的集合。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。原创 2023-01-22 12:26:19 · 1198 阅读 · 0 评论 -
缩减Golang编译后文件大小(npx压缩执行文件)
go编译出来的程序有点大,怎么解决?原创 2022-11-18 15:41:26 · 1095 阅读 · 0 评论 -
golang生成可供python调用的库(python调用Go代码)
由于Python项目中有关于支付签名与验签的模块,是自定的一些内部逻辑,基于安全性考虑, 希望改用C/C++或者Go 来重构该部分模块,做到加解签过程透明,上层代码只需要关心结果。原创 2022-11-08 09:27:28 · 935 阅读 · 0 评论 -
golang使用channel通道实现非阻塞队列和超时阻塞队列
Channel是Golang中非常重要的数据结构, golang的channel读或写是会造成阻塞的,但是可以用select的多路复用解决这个问题。原创 2022-10-31 21:28:00 · 2305 阅读 · 0 评论 -
mongodb报错:Problem inserting to mongo collection: no reachable servers
使用mgo操作mongo时遇到了上述的异常,原因是session的使用失败。在程序启动时,我创建了一个主 mgo.Session,然后,对于每个处理的请求,我复制主会话( `dbSession.Copy()`)并在完成后关闭它。但是,当并发调 `dbSession.Copy()` 时,报错:Problem inserting to mongo collection: no reachable servers原创 2022-10-31 10:18:21 · 923 阅读 · 0 评论 -
golang的defer的理解- defer的函数一定会执行吗?
go语言中defer可以完成延迟功能,当前函数执行完成后再执行defer的代码块。通过defer,我们可以在代码中优雅的关闭/清理代码中所使用的变量。原创 2022-10-23 15:45:36 · 1041 阅读 · 0 评论 -
golang设置socket选项参数SO_LINGER、SO_SNDBUF
golang设置socket选项参数SO_LINGER、SO_SNDBUF原创 2022-10-22 17:34:32 · 2201 阅读 · 0 评论 -
golang切片和数组拷贝(浅拷贝和深拷贝)
我们提到的深拷贝和浅拷贝,则指的是引用类型的值处理方案。数组和切片属于哪种?浅拷贝指的是,把变量里面存的内存地址拷贝了,所指向的真实值并没拷贝。原创 2022-10-22 00:26:43 · 9053 阅读 · 3 评论 -
golang-json构建和解析:Marshal与Unmarsha、json转换为map
Json(Javascript Object Nanotation)是一种数据交换格式,常用于前后端数据传输。任意一端将数据转换成json 字符串,另一端再将该字符串解析成相应的数据结构,如string类型,strcut对象等。go语言本身为我们提供了json的工具包”encoding/json”。原创 2022-10-14 21:22:10 · 2377 阅读 · 0 评论 -
Go语言-switch case | switch中判断多个值、interface conversion: interface {} is float64, not int
当嵌套的 if 比较少时(三个以内),用 if 编写程序会比较简洁。但是当选择的分支比较多时,嵌套的 if 语句层数就会很多,导致程序冗长,可读性下降。因此用 switch 语句来处理多分支选择。原创 2022-10-13 21:38:20 · 2302 阅读 · 0 评论 -
golang常用库之-ants包 | golang协程池(goroutine池)
ants是一个高性能的 goroutine 池,实现了对大规模 goroutine 的调度管理、goroutine 复用,允许使用者在开发并发程序的时候限制 goroutine 数量,复用资源,达到更高效执行任务的效果。ants的 Goroutine Pool 的容量是可以自定义的,也就是说使用者可以根据不同场景对这个参数进行调优直至达到最高性能。自动调度海量的 goroutines,复用 goroutines定期清理过期的 goroutines,进一步节省资源。原创 2022-10-12 22:15:45 · 5147 阅读 · 0 评论 -
golang语言 []interface{}和interface{}
在Goland中有一种特殊类型:interface{} ,空接口。interface{} 类型是没有方法的接口。由于没有 implements 关键字,所以所有类型都至少实现了 0 个方法,所以 所有类型都实现了空接口。这意味着,如果编写一个函数以 interface{} 值作为参数,那么可以为该函数提供任何值,并且,[]interface{}在golang中也可以认为是interface{}。原创 2022-10-05 11:04:19 · 4117 阅读 · 0 评论 -
Go (Golang) 语言-快速开始
Golang一般指go。 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。原创 2022-10-04 09:00:00 · 4511 阅读 · 4 评论 -
golang常用库之mapstructure包 | 多json格式情况解析、GO json 如何转化为 map 和 struct、Go语言结构体标签(Struct Tag)
Go library for decoding generic map values into native Go structures and vice versa.原创 2022-10-01 09:28:44 · 4373 阅读 · 0 评论