
go
文章平均质量分 64
march of Time
程序媛一枚
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
go语言实现协程池
该代码实现了一个Go语言协程池(GoPool),主要功能包括:1) 通过任务队列管理并发任务;2) 控制最大协程数量;3) 提供任务完成等待机制。GoPool结构包含任务通道、互斥锁、最大协程数等字段,提供创建协程池、提交任务、关闭池子等方法。使用示例展示了如何创建5个worker的协程池并提交10个任务。协程池会自动管理工作协程,当worker不足时任务会排队,支持等待所有任务完成或立即关闭两种模式。原创 2025-08-01 15:42:15 · 175 阅读 · 0 评论 -
go的errgroup和协程池
Go语言并发任务处理方案对比:errgroup适合批量任务管理,提供统一错误处理和上下文取消,但不控制并发数;协程池(如ants)则适用于严格限制并发数、复用goroutine资源的场景,能有效应对大量短任务、资源限制和任务队列需求。errgroup的协程生命周期取决于任务完成情况或上下文取消,而协程池可动态调整大小并支持任务超时控制。两者各有侧重,应根据CPU/IO密集型任务特点合理选择并发方案。原创 2025-06-19 11:44:25 · 413 阅读 · 0 评论 -
go在for循环中使用errgroup和channel进行并发处理
文章摘要: 本文对比了Go语言中处理并发任务的两种主要方式:errgroup和channel。errgroup提供了与context集成的并发控制机制,能自动传播错误并取消其他协程,类似于Java的CompletableFuture。它支持并发限制、错误传播和上下文取消。channel方式则通过创建错误通道和结果通道来收集处理结果,可以保持原有顺序,但需要手动管理协程同步。两种方式都支持共享资源的互斥访问,errgroup更适用于结构化并发,channel则更灵活但需要更多手动控制。原创 2025-06-17 14:54:03 · 283 阅读 · 0 评论 -
go工具库:hertz api框架 hertz client的使用
Hertz是由字节跳动开源的高性能Golang微服务框架,基于自研网络库netpoll,在延迟、QPS和内存占用等指标上优于标准库net/http。它提供灵活易用的中间件机制、可插拔组件设计,支持自动路由注册和多种序列化方式(JSON/Protobuf等),并内置服务治理能力(metrics、限流、熔断等)。框架兼容Gin风格,与CloudWeGo生态天然集成,适合构建微服务。文章详细介绍了Hertz的使用方法,包括创建标准/字节定制客户端、配置选项说明(超时/连接数/TLS等)以及发起请求的两种方式(Do原创 2025-06-07 15:22:07 · 1343 阅读 · 4 评论 -
go的工具库:github.com/expr-lang/expr
github.com/expr-lang/expr 是一个 Go 语言的表达式求值库,它允许你在运行时安全地执行表达式。主要用途包括:2.条件表达式3.复杂表达式主要特点:安全性:表达式在沙箱环境中执行性能:编译后的表达式执行速度快灵活性:支持自定义函数和变量类型安全:支持类型检查常见用途:规则引擎配置验证动态条件判断数据过滤业务规则执行。原创 2025-06-04 12:00:53 · 512 阅读 · 0 评论 -
go注册rpc接口
makeGRPCEndpoint 函数的目的是将一个 gRPC 服务方法封装为一个 endpoint.Endpoint 类型的函数。这个函数主要用于将 gRPC 请求转换为内部的服务调用,并处理相关的上下文和错误。这将生成两个文件:my.pb.go 和 my_grpc.pb.go。生成 gRPC 代码。原创 2025-03-11 14:31:11 · 350 阅读 · 0 评论 -
go程序中使用pprof增加程序监控功能
其中github.com/gorilla/mux 是 Go 语言中的一个非常流行的路由(Router)包,它提供了一个强大的 HTTP 路由器,能够帮助开发者更方便地定义 HTTP 路由规则,进行 URL 路由匹配、请求处理等操作。运行后,下载到本地的 CPU 分析数据文件为 cpu.pprof,然后可以使用 go tool pprof 进一步分析。启动程序后,访问 http://localhost:6060/debug/pprof/,查看提供的接口。2. 如何使用 pprof?Goroutine 状况。原创 2025-03-04 15:40:28 · 588 阅读 · 0 评论 -
go语言获取机器的进程和进程运行参数 获取当前进程的jmx端口 go调用/jstat获取当前Java进程gc情况
这里主要分享go中获取机器进程和进程参数的一些代码Process.CmdlineWithContext 方法的实现依赖于 callPsWithContext 函数来获取进程的命令行参数。原创 2025-02-13 16:09:29 · 601 阅读 · 0 评论 -
go获取正在运行的函数并及时捕获panic
因此,在使用 panic 和 recover 时,应该谨慎考虑是否真的需要它们,以及它们在程序中的作用。Go 语言中,panic 是一种运行时错误,它会导致当前 goroutine 立即停止执行,并开始逐层向上返回,直到被 recover 捕获或者程序崩溃。当 panic 发生时,defer 语句注册的函数仍然会被执行,这允许程序进行必要的清理工作,如关闭文件、释放资源等。通过使用 defer 和 recover,可以在发生 panic 时防止程序完全崩溃,允许程序优雅地处理错误。原创 2024-07-09 18:03:09 · 468 阅读 · 0 评论 -
go使用ssh执行脚本文件
go语言使用ssh包在远程服务器执行命令原创 2024-06-14 16:48:00 · 370 阅读 · 0 评论 -
gorm的find和scan使用
在 GORM 中,.Find() 和 .Scan() 都可以用于检索数据库记录,但它们之间存在一些差异,并不完全等同于彼此。原创 2024-06-03 11:28:15 · 3314 阅读 · 0 评论 -
示例:go语言将结构体的数据保存为JSON格式的文本数据
JSON格式是一种用途广泛的对象文本格式。在Go语言中,结构体可以通过系统提供的json.Marshal()函数进行序列化。为了演示怎样通过反射获取结构体成员及各种值的过程,下面使用反射将结构体序列化为文本数据。内容摘录自《go语言从入门到进阶实战》(2)准备要序列化的结构体数据。(1)准备数据结构体。(3)调用序列化函数。原创 2023-01-30 18:27:19 · 1067 阅读 · 0 评论 -
go语言的channel笔记
同理,如果缓冲通道中有数据,接收时将不会发生阻塞,直到通道中没有数据可读时,通道将会再度阻塞。·第11行,使用了time包提供的函数After(),从字面意思看就是多少时间之后,其参数是time包的一个常量,time.Second表示1秒。由于通道的数据在没有接收方处理时,数据发送方会持续阻塞,因此通道的接收必定在另外一个goroutine中进行。·第18行,匿名goroutine即将结束时,通过通道通知main的goroutine,这一句会一直阻塞直到main的goroutine接收为止。原创 2022-11-03 15:43:31 · 433 阅读 · 1 评论 -
【学习笔记】go协程和通道
摘自《go语言从入门到进阶实战》和韩顺平《go语言核心编程》虽然,线程池为逻辑编写者提供了线程分配的抽象机制。但是,如果面对随时随地可能发生的并发和线程处理需求,线程池就不是非常直观和方便了。能否有一种机制:使用者分配足够多的任务,。这种机制在Go语言中被称为goroutine。goroutine的概念类似于线程,但goroutine由Go程序运行时的调度和管理。Go程序会智能地将goroutine中的任务合理地分配给每个CPU。原创 2022-09-05 15:42:26 · 1326 阅读 · 0 评论 -
go语言中的结构体和组合思想入门示例
参考《go语言从入门到进阶实战》和韩顺平《go语言核心编程》原创 2022-07-21 17:02:33 · 934 阅读 · 0 评论 -
go语言的字符串类型、常量类型和容器类型
go语言笔记原创 2022-07-06 17:01:12 · 1125 阅读 · 0 评论 -
【学习笔记】go语言中变量赋值规则
文章目录前言1.标准格式2.编译器推导类型的格式3.推导声明写法多个变量同时赋值匿名变量——没有名字的变量前言本文章是go语言的学习笔记,用作go的入门学习,已经能熟虑使用go的就不用看了。1.标准格式var 变量名 类型 = 表达式例如:游戏中,玩家的血量初始值为100。可以这样写:var hp int = 100这句代码中,hp为变量名,类型为int,hp的初始值为100。 上面代码中,100和int同为int类型,int可以认为是冗余信息,因此可以进一步简化初始化的写法。2.编译器原创 2022-04-26 14:23:56 · 2709 阅读 · 0 评论