22 讲通关 Go 语言
文章平均质量分 94
AatZai
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
23 结束语 你的 Go 语言成长之路
本文介绍了Go语言的发展前景及学习建议。随着云原生技术的普及,Go语言凭借其高效并发、跨平台编译等特性成为云原生开发的首选,被Docker、K8s等广泛采用。学习建议从官方文档入手,通过多源资料系统学习,注重实践编程和源码阅读。最后强调工程师需要具备团队协作和领导能力,建议3年后开始带新人,5-7年后转向架构设计等更高价值工作,以提升职场竞争力。原创 2025-07-03 09:39:56 · 263 阅读 · 0 评论 -
22 网络编程:Go 语言如何通过 RPC 实现跨平台服务?
本文介绍了RESTful API的删除和修改用户功能实现,以及Go语言中的RPC服务开发。主要内容包括:1. 通过示例代码演示了使用DELETE方法删除用户和PATCH方法修改用户名的API实现;2. 讲解了RPC的基本概念和架构,包括通信协议、序列化等核心组件;3. 详细展示了在Go语言中使用net/rpc包开发基于TCP和HTTP协议的RPC服务;4. 介绍了JSON RPC的实现方法,支持跨语言调用;5. 对比了不同RPC实现方式的差异,并提供了完整的代码示例。文章最后建议在实际项目中使用更高效的gR原创 2025-07-03 09:39:00 · 752 阅读 · 0 评论 -
21 网络编程:Go 语言如何玩转 RESTful API 服务?
本文介绍了如何使用Go语言开发RESTful API服务。首先讲解了RESTful API的基本概念和HTTP方法规范,然后通过net/http包实现简单的API示例,并逐步改进为符合RESTful规范的JSON API。接着引入Gin框架简化开发,演示了获取用户列表、特定用户以及新增用户的功能实现。文章强调使用框架可以提高开发效率,并建议读者尝试完成用户修改和删除功能的作业。最后预告了下篇将介绍Go语言实现RPC服务的内容。原创 2025-07-03 09:37:39 · 734 阅读 · 0 评论 -
20 协作开发:模块化管理为什么能够提升研发效能?
本文介绍了Go语言如何通过模块化管理提升开发效率。首先解释了包的概念,即通过package关键字组织代码,并说明了导入包和使用包的方法。文章详细讲解了Go语言的作用域规则(首字母大写可跨包使用)和自定义包的创建方法。其次,介绍了模块作为更高层次的代码组织形式,以及如何使用go mod命令创建和管理模块。最后,讲解了如何设置代理和使用第三方模块(如Gin框架),通过go mod tidy自动维护依赖关系。文章强调模块化可以提高代码复用率,建议开发者合理拆分项目模块以提升协作效率。原创 2025-07-03 09:36:33 · 730 阅读 · 0 评论 -
19 性能优化:Go 语言如何进行代码检查和优化?
要讲的内容是 Go 语言的代码检查和优化,下面我们开始本讲内容的讲解。在项目开发中,保证代码质量和性能的手段不只有单元测试和基准测试,还有代码规范检查和性能优化。代码规范检查是对单元测试的一种补充,它可以从非业务的层面检查你的代码是否还有优化的空间,比如变量是否被使用、是否是死代码等等。性能优化是通过基准测试来衡量的,这样我们才知道优化部分是否真的提升了程序的性能。原创 2025-07-03 09:35:08 · 707 阅读 · 0 评论 -
18 质量保证:Go 语言如何通过测试保证质量?
本专栏第四模块讲解工程管理,重点介绍多人协作中的代码质量保障。通过Go语言示例演示单元测试和基准测试的使用: 单元测试要点 测试文件命名需以_test.go结尾 测试函数以Test开头,接收*testing.T参数 示例展示了斐波那契数列函数的测试方法 可通过coverprofile查看测试覆盖率 基准测试要点 函数以Benchmark开头,接收*testing.B参数 需将测试代码放入循环中 可统计内存使用情况和并发性能 示例通过缓存优化使性能提升28倍 测试实践建议 单元测试应覆盖各种边界条件 基准测试原创 2025-07-03 09:32:45 · 893 阅读 · 0 评论 -
17 SliceHeader:slice 如何高效处理数据?
本文详细介绍了Go语言中slice切片的原理和高效设计。首先分析了数组的局限性:固定大小和传参时的内存浪费。然后讲解了slice的底层结构SliceHeader(Data指针、Len长度和Cap容量),其动态扩容机制和共享底层数组的特性使其比数组更高效。通过示例展示了slice在函数传参时仅复制SliceHeader,避免了数组复制带来的性能损耗。特别探讨了string与[]byte的零拷贝互转技巧,利用unsafe.Pointer直接操作底层指针结构,避免了内存重新分配。最后指出slice通过封装指针和数原创 2025-07-03 09:31:01 · 967 阅读 · 0 评论 -
16 非类型安全:让你既爱又恨的 unsafe
本文介绍了Go语言反射调用方法及unsafe包的高级用法。首先通过反射调用结构体方法的示例,展示了如何使用reflect包动态调用方法。然后重点讲解了unsafe包的功能:1. 通过Pointer实现不同类型指针的安全转换;2. 使用uintptr进行指针运算和内存操作;3. Sizeof函数获取类型内存大小。文章指出unsafe虽能提高性能但存在风险,建议谨慎使用。最后提到Alignof函数作为思考题,并预告下节课将讲解[]byte转string的零拷贝实现。原创 2025-07-03 09:28:34 · 554 阅读 · 0 评论 -
15 运行时反射:字符串和结构体之间如何转换?
本文介绍了Go语言中反射机制的使用,重点讲解了reflect.Value和reflect.Type在字符串与结构体转换中的应用。主要内容包括: 反射基础:通过reflect.ValueOf和reflect.TypeOf获取变量的值和类型信息,以及如何通过反射修改变量值。 结构体操作:演示如何遍历结构体字段和方法,判断是否实现特定接口。 JSON转换:详细说明如何利用struct tag实现结构体与JSON字符串的相互转换,包括自定义JSON key名称等。 反射定律:总结Go反射的三大基本原则,强调反射虽然原创 2025-07-03 09:27:12 · 785 阅读 · 0 评论 -
14 内存分配:new 还是 make?什么情况下该用谁?
摘要:Go语言中内存分为堆和栈,堆内存由开发者管理,栈内存由语言管理。变量声明涉及内存分配,值类型变量自动分配内存,指针类型需手动分配。内置函数new用于分配内存并返回指针,适用于所有类型;make用于初始化slice、map和chan三种内置类型,适合复杂结构的创建。变量初始化可通过声明赋值或工厂函数完成,指针变量需先分配内存才能赋值。理解new和make的区别及使用场景,有助于高效管理内存和变量初始化。原创 2025-07-03 09:17:40 · 707 阅读 · 0 评论 -
13 参数传递:值、引用及指针之间的区别?
本文深入探讨了Go语言中接口指针、值传递和引用类型的特性。通过代码示例分析指出:虽然具体类型的指针可以实现接口,但指向接口的指针永远无法实现接口。文章解释了值类型参数传递时创建副本的特性,以及指针类型和引用类型(map/channel)在参数传递中能修改原数据的原因——它们本质上都是通过指针实现的。最后总结了Go语言严格的"值传递"机制,强调要根据需求合理选择参数类型。文章还提示了各种类型的零值情况,为理解Go语言的内存机制提供了重要参考。原创 2025-07-02 14:57:34 · 675 阅读 · 0 评论 -
12 指针详解:在什么情况下应该使用指针?
本文深入讲解了Go语言指针的核心概念和用法。首先解释了指针的本质是存储内存地址的数据类型,并通过示例演示了指针的声明、定义和操作。文章详细介绍了指针的两种主要操作:获取指针指向的值和修改指针指向的值,并通过函数参数和接收者示例展示了指针的实际应用场景。最后总结了指针使用的优缺点和适用条件,建议在必须修改数据或节省内存时才使用指针,并提供了7条具体的使用建议。文章强调在Go开发中应优先考虑值类型,仅在必要时才使用指针类型。原创 2025-07-02 14:55:28 · 731 阅读 · 0 评论 -
11 并发模式:Go 语言中即学即用的高效并发模式
本文介绍了Go语言中几种常用的并发编程模式:1. for-select循环模式(包括无限循环和有限循环两种形式)2. select-timeout超时模式3. Pipeline流水线模式(通过channel连接工序)4. 扇出扇入模式(提高并发处理能力)5. Futures模式(异步执行独立任务)。这些模式充分利用了goroutine和channel的特性,提供了解决不同并发场景的标准方案,如时间敏感操作、流水线处理、任务并行等。文章通过手机组装和生产火锅等具体示例,详细说明了每种模式的应用场景和实现方法。原创 2025-07-02 09:10:06 · 995 阅读 · 0 评论 -
10 Context:你必须掌握的多线程并发控制神器
本文介绍了Go语言中如何通过Context控制并发协程的退出。首先复习了使用select+channel实现协程退出的方法,然后引入Context机制,详细讲解了Context接口的四个方法及其使用场景。文章展示了通过Context.WithCancel创建可取消Context来控制多个协程退出的示例,并介绍了Context树的衍生结构和四种生成Context的函数。最后总结了Context的传值功能和使用原则,强调Context应作为参数传递、放在首位,并尽量少传值。Context提供了一种统一管理协程的原创 2025-07-02 09:07:41 · 898 阅读 · 0 评论 -
09 同步原语:sync 包让你对并发控制得心应手
Go语言提供了多种并发同步机制,包括channel、互斥锁(sync.Mutex)、读写锁(sync.RWMutex)、等待组(sync.WaitGroup)、单次执行(sync.Once)和条件变量(sync.Cond)。channel通过内部互斥锁保证并发安全,而其他同步原语则提供更底层的控制方式:互斥锁用于保护临界区,读写锁优化读多写少场景,WaitGroup协调多协程任务,Once确保代码只执行一次,Cond实现通知唤醒机制。这些工具各具特点,channel是推荐的高级用法,但在需要更灵活控制时,这原创 2025-07-02 09:06:21 · 660 阅读 · 0 评论 -
08 并发基础:Goroutines 和 Channels 的声明与使用
本文摘要: Go语言并发编程的核心是协程(goroutine)和通道(channel)。协程比线程更轻量,使用go关键字即可启动,如go func()。多个协程间通过channel通信,channel分为无缓冲(同步)和有缓冲(队列式)两种类型,使用make创建。select语句可实现多路复用,监听多个channel的状态。Go提倡通过channel通信而非共享内存来实现并发安全。关键点包括: 协程启动语法 channel的发送/接收操作 有缓冲与无缓冲channel区别 select多路复用机制 通信代替原创 2025-07-02 09:04:51 · 919 阅读 · 0 评论 -
07 错误处理:如何通过 error、deferred、panic 等处理错误?
本文介绍了Go语言的错误处理机制。首先讲解了error接口的使用,包括通过errors.New生成错误、自定义错误类型实现error接口、error类型断言等。接着介绍了Go 1.13新增的错误嵌套功能,包括fmt.Errorf的%w包装、errors.Unwrap解包、errors.Is和errors.As判断错误类型。然后讲解了defer延迟执行函数的使用场景,如资源释放等。最后说明了panic异常的产生和通过recover捕获panic的方法。文章强调Go语言更推荐使用error机制而非panic来处原创 2025-07-02 09:03:29 · 845 阅读 · 0 评论 -
06 struct 和 interface:结构体与接口都实现了哪些功能?
本文介绍了Go语言中结构体和接口的核心概念。结构体是一种聚合类型,可以包含多个字段,用于描述复合对象。接口定义了一组方法的约定,实现接口的类型必须满足这些方法。文章详细讲解了结构体的定义、初始化、嵌套使用,以及接口的定义、实现和类型断言。特别强调了值接收者和指针接收者在接口实现中的区别,并介绍了工厂函数和组合(替代继承)的使用方式。这些特性使Go语言能够实现代码的抽象和复用,支持面向接口编程,提高代码的灵活性和适应性。原创 2025-07-02 09:01:01 · 627 阅读 · 0 评论 -
05 函数和方法:Go 语言中的函数和方法到底有什么不同?
摘要:本文介绍了Go语言中的函数和方法。函数由func关键字、函数名、参数、返回值和函数体构成,支持多值返回、命名返回参数和可变参数。方法则与类型绑定,需指定接收者(值或指针类型)。两者都能实现代码复用,区别在于函数属于包,方法属于类型。文章还演示了匿名函数和闭包的使用,并指出Go语言会自动处理值/指针接收者的转换。最后思考题探讨方法作为表达式赋值给变量的可能性。原创 2025-07-02 08:58:18 · 1842 阅读 · 0 评论 -
04 集合类型:如何正确使用 array、slice 和 map?
本文介绍了Go语言中的三种集合类型:数组、切片和映射。数组是固定长度、同类型的连续元素集合,可通过索引访问;切片是基于数组的动态集合,可通过make或字面量创建,支持append操作;映射是无序键值对集合,支持增删改查操作。文章还讲解了这些集合的声明、初始化、遍历方法,以及字符串与字节切片的转换。在实际开发中,切片使用最多,因其灵活性高且内存占用小。最后提到二维数组的练习和map的优化选择建议。原创 2025-07-02 08:56:04 · 1078 阅读 · 0 评论 -
03 控制结构:if、for、switch 逻辑语句的那些事儿
摘要:本文介绍了Go语言中的流程控制语句,包括if条件判断、switch选择和for循环。if语句通过布尔表达式决定执行分支,支持初始化语句;switch语句替代多重if结构,支持fallthrough延续执行;for循环提供三种组件(初始化、条件、更新),可简化为while形式,并支持无限循环和break/continue控制。这些结构使程序具备逻辑执行能力,后续课程将深入讲解类型选择和for range等高级特性。思考题为练习for循环中continue的使用。原创 2025-07-02 08:51:11 · 884 阅读 · 0 评论 -
02 数据类型:你必须掌握的数据类型有哪些?
《Go语言基础:变量、常量与类型详解》摘要 本文系统介绍了Go语言的基础编程元素,重点讲解了变量与常量的声明方式(var/const)及类型推导特性,演示了简短声明(:=)的使用。详细剖析了整型、浮点型、布尔型和字符串等基础数据类型,特别说明字符串连接(+)和strings包的高频用法。通过示例展示了指针操作、iota常量生成器及类型转换(strconv包),强调Go强类型特性下的数字与字符串互转方法。文章还对比了零值机制与变量赋值的区别,为后续复杂程序开发奠定基础。思考题提示使用strings包函数实现字原创 2025-07-01 20:13:04 · 840 阅读 · 0 评论 -
01 基础入门:编写你的第一个 Go 语言程序
摘要:本文介绍了Go语言的入门知识,通过"Hello World"示例讲解了Go程序的基本结构,包括package、import、main函数等核心概念。详细说明了Windows、Linux和macOS系统下Go语言开发环境的搭建步骤,包括安装、环境变量设置和项目结构配置。文章还介绍了Go程序的编译发布、跨平台编译功能,并推荐了Visual Studio Code和Goland两款开发工具。最后布置了一个小作业,让读者尝试改编示例代码打印自己的名字。原创 2025-07-01 20:12:07 · 790 阅读 · 0 评论 -
00 开篇词 Go 为开发者的需求设计,带你实现高效工作
《Go语言高效开发与实践指南》摘要:技术总监飞雪无情基于10年经验,分享Go语言的优势与应用价值。作为兼具C语言性能和Java便利的现代语言,Go凭借简洁语法、高效并发和强大标准库,成为微服务和云原生开发的首选。专栏系统设计5大模块:从基础语法、高效并发到底层原理,结合工程管理和实战项目(HTTP/RPC服务),帮助开发者深入理解并快速上手。特别针对常见学习痛点——知识碎片化、思维转换困难等,通过生活化案例和源码分析,提供可落地的解决方案。适合1-3年经验的开发者转型学习,也是新手构建编程思维的高效路径。原创 2025-07-01 20:10:50 · 492 阅读 · 0 评论
分享