- 博客(62)
- 收藏
- 关注
原创 Go并发模型与模式:context 上下文控制
Go的context包是管理并发编程中goroutine生命周期的关键工具。它提供四种创建方式:Background()、TODO()、WithCancel()和WithTimeout(),用于统一管理取消信号、超时控制和跨API数据传递。典型应用包括主动取消goroutine、设置超时自动终止、在channel模式中控制工作池,以及安全传递请求ID等元数据。最佳实践强调统一使用根context、及时调用cancel()避免泄漏,并在goroutine中监听Done()信号。context与goroutin
2025-06-11 09:04:34
144
原创 Go语言并发模型与模式:Fan-out / Fan-in 模式
•Fan-out(扇出):将任务从一个入口分发给多个 worker 并发执行。•Fan-in(扇入):将多个 worker 的结果汇聚到一个通道中进行统一处理。这种模式适用于“多产一收”的数据处理流程,如数据抓取、批量计算等。
2025-06-10 09:20:54
278
原创 Go语言并发模型与模式:Worker Pool 模式
Worker Pool 模式通过固定数量的工作者(Worker Goroutines)来消费任务通道中的任务,从而达到控制并发数的目的。•任务通道(Jobs):任务的来源;•Worker(工作者):处理任务的 Goroutine;•结果通道(可选):传递任务执行结果;•同步机制:如等,等待所有任务完成。
2025-06-09 00:07:15
424
原创 Go 并发编程基础:select 多路复用
select类似于switch语句,但它用于监听多个通道的发送/接收操作。一旦其中任意一个通道准备就绪,select就会执行相应的语句块。
2025-06-08 05:48:19
437
原创 Go 语言并发编程基础:无缓冲与有缓冲通道
本文分析了Go语言中两种通道类型的特点与应用场景。无缓冲通道(ch)实现同步通信,要求发送和接收操作必须配对,适用于精确同步、信号通知等场景;有缓冲通道(make(chan T, size))允许异步操作,内部维护固定长度缓冲区,适用于任务队列、生产者-消费者模型等高并发场景。文章通过代码示例对比了两者在阻塞行为、死锁风险等方面的差异,并给出了使用建议:无缓冲通道适合事件通知和调试,有缓冲通道更适合任务派发和负载缓冲。合理选择通道类型是实现高效并发编程的基础。
2025-06-07 07:57:07
566
原创 Go 并发编程基础:通道(Channel)的使用
Channel是 Go 语言中实现“通信顺序进程”(CSP)模型的关键组件。• 用于在多个 Goroutine 之间传递数据• 本质上是一个先进先出的队列• 保证并发安全var ch chan 数据类型。
2025-06-06 10:28:10
856
原创 Go 语言并发编程基础:Goroutine 的创建与调度
本文介绍了Go语言的并发核心机制Goroutine。主要内容包括:Goroutine作为轻量级线程的特性(启动快、占用资源少、数量多、自动调度);创建方式(go关键字启动函数或匿名函数);M:N调度模型(Goroutine、线程和逻辑处理器的映射关系);调度器工作原理和调试方法;以及常见使用场景。文章强调Goroutine的高效调度机制使Go成为开发高并发程序的理想选择。
2025-06-05 04:06:53
714
原创 Go语言依赖管理与版本控制-《Go语言实战指南》
能力Go Modules 是否支持精确版本控制✅ 支持 SemVer多模块/子模块管理✅ 支持离线缓存与重复构建✅ 支持安全验证(go.sum)✅ 支持替换本地/远程依赖✅ 支持 replace国内代理加速✅ 可设置 GOPROXY。
2025-06-04 08:54:58
674
原创 Go Modules 详解 -《Go语言实战指南》
Go Modules 是 Go 官方提供的依赖管理工具• 第三方依赖版本控制• 项目脱离 GOPATH 限制• 多模块管理与复用。
2025-06-03 08:52:42
805
原创 Go语言包的组织与导入 -《Go语言实战指南》
• 每个.go文件都属于某个包(通过package声明)• 每个包对应一个目录(一个目录只能有一个包名)• Go 程序从main包中的main()函数开始执行// 文件名:main.go")
2025-06-02 07:56:22
530
原创 Go语言之接口与多态 -《Go语言实战指南》
接口是一组方法签名的集合,任何类型只要实现了接口中声明的所有方法,就被视为实现了该接口不需要显式声明。Speak()任何具有Speak()方法的类型,都会被认为实现了Speaker接口。
2025-05-31 09:13:26
445
原创 Go语言JSON 序列化与反序列化 -《Go语言实战指南》
JSON(JavaScript Object Notation)是一种常见的数据交换格式。Go 标准库提供了包,用于方便地将结构体与 JSON 之间互转。
2025-05-28 07:33:59
696
原创 Go语言模拟集合类型-《Go语言实战指南》
集合(Set)是一种不包含重复元素的无序数据结构。• 添加元素(Add)• 删除元素(Remove)• 判断是否存在(Contains)• 遍历集合(Iterate)
2025-05-24 08:02:27
474
原创 Map的遍历与判断键是否存在-《Go语言实战指南》
操作示例语法遍历 key-value只遍历 key判断 key 是否存在key 不存在时的返回返回值类型的零值(如 int 为 0)通过掌握map的遍历和判断机制,能更安全、高效地处理键值对数据结构,避免“隐形 bug”。
2025-05-23 07:10:22
927
原创 Go语言之Map 的基本操作-《Go语言实战指南》
keyType可比较类型(如:int、string、bool),valueType可为任意类型。操作方法创建 map添加/更新读取判断存在删除键遍历掌握这些基础操作后,你就能高效地在 Go 中使用 map 来组织和处理键值数据。
2025-05-22 09:40:37
737
原创 Go语言内存共享与扩容机制 -《Go语言实战指南》
场景推荐做法拷贝独立副本使用copy判断是否扩容比较底层地址避免共享污染不直接修改共享切片高性能追加使用make提前指定足够容量批量追加使用切片是 Go 处理动态数组的利器,掌握其共享机制和扩容逻辑,能帮助你在写出高效、低耦合的代码时更加得心应手。
2025-05-21 18:14:31
1087
原创 Go语言之切片的原理与用法 - 《Go语言实战指南》
切片是对数组的一个连续片段的引用,其本质是一个三元组• 指向底层数组的指针• 切片的长度(len)• 切片的容量(cap)
2025-05-20 05:49:43
759
原创 defer关键字:延迟调用机制-《Go语言实战指南》
defer是 Go 语言中用于函数调用的关键字。它广泛用于资源释放、异常捕获、日志记录等场景,是构建健壮代码的利器。
2025-05-18 10:24:20
892
原创 匿名函数与闭包(Anonymous Functions and Closures)-《Go语言实战指南》原创
匿名函数是没有名字的函数,可以定义后立即调用,或赋值给变量后使用。}(3, 5)fmt.Println("结果:", result) // 输出:结果:8闭包是一个函数值,它“捕获”并“记住”了其外部作用域的变量,即使外部函数已经执行完毕,这些变量依然存在。
2025-05-17 20:30:01
611
原创 可变参数(Variadic Functions)- 《Go语言实战指南》
可变参数本质上是一个切片(slice),可以使用 或 遍历。三、可变参数的传递机制传入的是零个或多个参数:如果你已经有一个 切片,可以通过 传入:四、与固定参数混用可变参数可以与固定参数组合使用,但必须放在参数列表最后:五、零参数情况的处理如果调用时不传可变参数,函数仍能正常执行:六、可变参数是切片(slice)你可以对它执行切片操作、获取长度等:七、不能有多个可变参数Go 不支持多个可变参数,以下写法是错误的:八、小结
2025-05-16 02:35:45
739
原创 多返回值(Multiple Return Values)- 《Go语言实战指南》
Go 语言支持函数返回多个值,这一特性在实际开发中非常常见,尤其用于错误处理。
2025-05-15 03:54:01
661
原创 循环语句:for、range -《Go语言实战指南》
Go 语言没有while和do...while,所有循环控制统一通过for实现。搭配range关键字,可以高效遍历数组、切片、字符串、map 和 channel。
2025-05-12 19:04:44
584
原创 条件语句:if 与 switch -《Go语言实战指南》
在程序中,我们常常需要依据不同的条件执行不同的代码逻辑。if和switch,结构清晰、功能强大。
2025-05-11 08:54:16
588
原创 运算符与表达式 -《Go语言实战指南》
赋值运算符 | `= += -= *= /= %=` | 基础赋值与复合赋值 | | || 位运算符 | \`& | ^ &^ << >>\` | 位与、或、异或、位清零等 | || 优先级(从高到低) | 运算符 | | || 6 | 赋值运算符(如 `=` `+=` `-=`) | | |
2025-05-10 07:32:06
653
原创 数据类型详解(布尔值、整型、浮点型、字符串等)-《Go语言实战指南》
Go语言是一门静态强类型语言,所有变量在编译时必须明确其数据类型。本章将详细介绍Go的基础数据类型,帮助你理解并正确使用它们。
2025-05-09 16:32:38
849
原创 Go语言变量与常量 -《Go语言实战指南》
在Go语言中,变量与常量是构建程序最基本的组成部分。本章将带你掌握变量和常量的声明方式、使用方法以及注意事项,打牢语言基础。
2025-05-08 06:09:32
945
原创 Go语言包与模块(module)的基本使用-《Go语言实战指南》
在Go中,每个.go文件都属于一个包。包是代码组织的最小单位,Go通过import引用其他包来实现代码复用。myproject/└── add.goadd.gomain.goimport ("fmt"模块是Go 1.11 引入的依赖管理机制,是一组相关包的集合。
2025-05-07 07:04:27
705
原创 Go命令行工具详解 -《Go语言实战指南》
Go语言自带的命令行工具非常强大,是开发者日常工作中不可或缺的助手。本章将详细介绍常用的Go命令行工具及其使用场景,帮助你更高效地开发、构建、测试和管理Go项目。
2025-05-06 07:49:03
939
原创 你的第一个Go程序:Hello, World!-《Go语言实战指南》
学习任何一门编程语言的第一步,几乎都是从输出一行“Hello, World!”开始。Go语言也不例外。本章将带你从零开始,创建你的第一个Go程序,并逐行讲解它的结构与原理。
2025-05-05 09:57:45
492
原创 安装与配置Go语言开发环境 -《Go语言实战指南》
为了开始使用Go语言进行开发,我们首先需要正确安装并配置Go语言环境。Go的安装相对简单,支持多平台,包括Windows、macOS和Linux。本节将逐一介绍各平台的安装流程及环境变量配置方式。
2025-05-04 09:16:23
974
原创 Go语言的优势与应用场景 -《Go语言实战指南》
Go 的网络库极其高效,结合 Gin、Echo、Fiber 等 Web 框架,开发 RESTful API 简洁迅速,性能接近原生 C++。它特别适合那些对性能、部署、并发要求高的场景,也成为了当今云原生、DevOps 和后端服务开发的重要语言。Go自带的标准库覆盖网络、加密、JSON处理、HTTP服务等常见任务,无需引入大量第三方依赖。**一句话总结:**写得快、读得快、改得快,适合中大型团队协作开发。这使得Go在并发处理上性能优越,尤其适合高并发、高吞吐量的网络服务。Go 是构建云计算平台的首选语言。
2025-05-03 09:44:20
1283
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人