
布道Go语言
文章平均质量分 76
Go语言基础和一些常用的开发插件、工具
闫同学鸭
让旷野天空放一片晴
展开
-
搞懂Go泛型,看这一篇就够了
泛型是一种编程语言特性,**允许在编写代码时不指定具体的数据类型,而是在使用时再确定具体类型。**原理层面,**Go语言的泛型主要基于类型参数化和类型推断,在编译时为不同类型参数组合生成具体实现,以实现通用且类型安全的代码。**通过泛型,可以编写更加通用和可重用的代码,避免重复代码的出现,提高代码的可维护性和灵活性。在Go 1.18版本中,泛型被正式引入,极大地增强了Go语言的表达能力。// 函数体这里的[T any]表示函数有一个类型参数T,并且T可以是任意类型。any是一个预定义的接口类型,等价于。原创 2025-05-03 16:36:16 · 922 阅读 · 0 评论 -
Go市场份额达3%!4月编程语言排行出炉~
2025年,Go的模块化依赖管理(Go Modules)和泛型特性的进一步优化,进一步吸引了Java、Python开发者迁移。TIOBE的排名基于搜索引擎的编程语言热度计算,虽然不能完全等同于实际使用量,但它反映了开发者对Go语言的关注度与技术选型倾向。Python在AI领域的统治地位难以撼动,但Go可通过高性能计算库(如Gonum)和与AI框架(如TensorFlow Serving)的深度集成,开拓新场景。此次TIOBE排名的突破,不仅是Go语言的里程碑,更是对“务实工程文化”的肯定。原创 2025-04-22 23:23:34 · 1109 阅读 · 0 评论 -
快来看!你的Go代码还能更优雅
它提供了一系列具体建议,涵盖命名规范(如变量名简洁性)、错误处理方式(直接返回而非包装日志)、接口设计原则(避免过度抽象)、并发模式(如 channel 使用陷阱)、性能优化点(减少内存分配)等场景,旨在帮助开发者遵循 Go 社区约定俗成的代码风格和设计哲学,确保代码符合 Go 语言"简单、明确、高效"的核心思想,提升项目的可维护性和一致性。良好的风格让代码自带说明书——清晰的错误处理让人一眼看出潜在风险,简洁的接口设计让扩展功能更轻松,规范的并发控制能避免隐蔽的运行时陷阱。一般len方法用于切片上。原创 2025-04-22 23:21:39 · 203 阅读 · 0 评论 -
Go小技巧&易错点100例(二十四)
和类型断言/类型开关可以提供一定的灵活性,但也会牺牲一些类型安全性。因此,在可能的情况下,最好使用具体的类型来避免不必要的类型检查和转换。:频繁的类型断言和类型开关可能会对性能产生影响,特别是在大型代码库中。因此,在设计接口和类型时,应该考虑如何减少不必要的类型检查。类型的值时,通常需要进行类型断言(type assertion)或类型开关(type switch)来校验其实际类型。:如果以上步骤都不能解决问题,可能是模块本身的问题,可以联系模块的维护者。类型的值是否满足特定的类型,并获取该类型的值。原创 2025-03-06 22:49:12 · 752 阅读 · 0 评论 -
Go程序最多可以多少个协程?
Go语言的协程模型为高并发应用提供了强大的支持,使得开发者能够轻松地管理数十万甚至数百万个并发任务。然而,协程数量并非越多越好,合理的协程管理和优化策略是确保系统高效运行的关键。通过理解影响协程数量的因素,应用最佳实践和优化方法,开发者可以构建出既高效又稳定的Go程序,满足现代企业对高并发和高可用性的需求。关于协程的数量与CPU核数,这两者间确实存在一定的关系,但这种关系并不是绝对的。在实际应用中,需要根据应用类型、系统资源限制以及性能监控数据等多个因素来动态调整协程数量与CPU核数的比例。原创 2025-03-06 22:48:22 · 910 阅读 · 0 评论 -
DeepSeek回答:AI时代Go语言学习路线
Go语言的简洁性、并发能力和云原生基因使其在AI时代持续占据优势。深耕云原生:掌握K8s生态,成为基础设施层专家。拥抱AI工具:用AI提升编码效率,同时探索Go在AI工程化中的新场景。保持底层思维:理解运行时机制(如GC算法),避免成为“调参工程师”。Go语言以其简洁、高效和并发能力成为现代开发者的首选语言之一。从基础语法到高并发编程,再到云原生架构设计,Go的学习路径清晰且实用。在AI时代,Go在AI基础设施、模型部署和高性能数据处理中展现出独特优势。原创 2025-02-25 23:17:41 · 1454 阅读 · 0 评论 -
手撸了一个文件传输工具
通过手撸这个文件传输工具,我对TCP编程有了更深刻的理解,其实有些功能并不需要利用HTTP、RPC等上层协议进行实现,更别说各种各样的框架了,最简单的功能往往TCP协议就足够了。原创 2024-12-01 22:02:23 · 4348 阅读 · 0 评论 -
浅谈Go语言Optional模式和Builder模式
Optional模式和Builder模式都是Go语言中用于对象构建和配置的重要设计模式。Optional模式通过函数选项提供灵活的配置选项,适用于参数较少且相对简单的情况。而Builder模式则通过逐步构建对象并提供多种配置选项,适用于构建复杂对象的情况。在选择使用哪种模式时,应根据具体需求和对象复杂程度进行权衡。原创 2024-11-20 23:29:56 · 1060 阅读 · 0 评论 -
带你用Go实现二维码小游戏(下)
到这里我们就完成了《Go语言实现二维码小游戏》从设计、接口开发再到监控运维的全部过程,希望你能从中学到东西,当然有些地方做的还不是很完善,因此在后续可能会更新一篇文章主要针对已有项目的优化,也希望屏幕前正在阅读的你能够留言给出优化建议。原创 2024-11-07 21:41:26 · 1086 阅读 · 0 评论 -
带你用Go实现二维码小游戏(中)
DPI intX, Y intX, Y int为什么设置三个结构体呢?主要是因为在画证书的时候需要把证书的模板里填上内容,而内容又分为图片内容和文字内容,如图:因为图片内容和文字内容的属性大部分都不一样,所以独立出来了两个结构体。然后同样是Optional的模式= "" {opt(r)return r。原创 2024-10-30 23:00:09 · 529 阅读 · 0 评论 -
带你用Go实现二维码小游戏(上)
先看整个业务的流程图,游戏的核心就是拼图+二维码生成体验地址(目前仅支持PC端):游戏流程1)开始输入你的用户名,并选择你要拼图的图片,然后点击开始:2)选择图片完成后会出现游戏页面,进行拼图游戏:3)拼图完成后会进行提示,点击确定页面跳转到二维码:4)扫码,获取证书Go实现HTTP服务相对简单,只需要启动一个tcp的Listener,绑定端口,与HTTP Server关联,然后启动HTTP服务,如下代码,是我们提供的两个HTTP接口和静态资源地址的指定。if err!= nil {原创 2024-10-27 22:31:41 · 858 阅读 · 0 评论 -
原来go build命令有这么多学问
go build 是 Go 语言中一个非常强大且灵活的命令,它使得从源代码到可执行文件的转换变得简单而直接。通过利用它的各种选项和跨平台编译功能,你可以轻松地编译和分发你的 Go 程序。无论是在开发过程中还是在准备部署时,go build 都是 Go 程序员工具箱中不可或缺的一部分。与此同时,编译原理确实是一门非常值得深入学习的课程,它不仅在理论层面上构筑了计算机科学的重要基石,更在实践应用中展现了其无可替代的价值。原创 2024-10-05 11:01:52 · 2624 阅读 · 0 评论 -
Go小技巧&易错点100例(十七)
总的来说,Go语言中的定时任务具有广泛的应用场景和灵活的使用方法,可以帮助开发人员更好地管理和优化应用程序。在Go语言中,定时任务(也称为定时器或cron作业)具有多种作用,这些作用在应用程序的开发和运维中非常有用。,Go 程序可以调用 C 函数,使用 C 语言定义的数据类型,甚至可以使用 C 语言的头文件和源文件。这个类型的定时任务使用cron表达式进行任务的处理,比如下面代码的cron表达式。这个类型的定时任务是直接使用Go语言的内置类型进行计算,比较简单。(2)创建cron类型的定时任务。原创 2024-08-21 22:32:35 · 898 阅读 · 0 评论 -
Go小技巧&易错点100例(十六)
本期看点:正文开始:在Go语言中,切片(slice)是一个引用类型,它是对底层数组的抽象表示,提供了动态长度的、灵活的序列类型。切片包含三个重要的属性:指向底层数组的指针、切片的长度以及切片的容量。切片的长度和容量之间有一个重要的关系:切片的长度不会超过其容量。 这意味着,当你尝试向切片添加更多元素时,如果添加后的元素个数超过了切片的容量,Go语言会创建一个新的、更大的底层数组,并将原有元素和新元素复制到新数组中,然后让切片指向这个新的底层数组。这个过程称为切片的扩容。需要注意的是,切片的长度和容量是可以变原创 2024-08-21 22:31:50 · 1020 阅读 · 0 评论 -
听说它可以让代码更优雅
总的来说,静态代码检查工具是一个能够提升我们代码质量的工具,可以发现编译器发现不了的问题。这些工具的使用可以显著提高软件质量,所以大家赶快掌握起来,写出更优雅的代码!原创 2024-07-30 22:40:25 · 342 阅读 · 0 评论 -
莫非这就是Go最优雅的协程池?
经常写Go的小伙伴都知道,Go语言的goruntine是这门编程语言的一大利器,相比线程,基于协程的goruntine更加轻量和高效,并且在语法上十分的简单。协程(Coroutine)和线程(Thread)是两种不同的并发执行控制结构,它们在多个方面存在显著的差异。首先在定义上,,是轻量级的。,是重量级的。,可以根据需要增长和缩小,内存使用效率高。,堆栈大小限制了线程的数量,并可能导致堆栈溢出错误。原创 2024-07-25 20:28:42 · 1153 阅读 · 0 评论 -
预测一波,这份Go语言资料即将爆火
顾名思义,是一个旨在分享Go语言学习过程中的100个小技巧与易错点的仓库。这些技巧不仅覆盖了Go语言的基础语法、高级特性,还深入探讨了性能优化、并发编程等进阶话题。作者以文章的形式,将每一个问题、每一个技巧都阐述得清晰明了,既适合初学者巩固基础,也适合有一定经验的开发者查漏补缺、提升技能。原创 2024-07-12 22:19:13 · 497 阅读 · 0 评论 -
Go程序出问题了?有pprof!
通过上面对pprof工具的使用,发现其在Go程序分析中具有重要作用。具体来说,pprof通过收集程序运行时的信息,生成可视化的报告,帮助开发者理解程序的行为,并找出代码中的性能问题。其他相关博客推荐。原创 2024-05-27 23:01:04 · 1278 阅读 · 0 评论 -
报告!Golang冲上来啦!
Go语言还善待那些运行Go程序的人,Go程序易于安装和更新,需要最少的配置和依赖关系,并捕获最常见的使用错误和运行时错误,并为用户提供有关问题和如何修复的有用、准确和友好的信息。今天又来讲Go语言,根据全球知名的编程语言排行榜TIOBE在4月份公布的最新的编程语言排名,令人瞩目的是,Go语言已经跃升至历史最高位,位列排行榜第七名,并且。除此之外Go基础库提供描述性名称,比如包名,简单容易记录,易于导入,内部设计深度抽象,让用户利用小而简单的 API 来访问强大、有用的行为。最好的优化是不需要优化。原创 2024-05-12 22:52:25 · 928 阅读 · 0 评论 -
如何优雅的设计一个SDK
到这里大家可能会产生疑问,为什么NewSDK的时候除了host还要带上username和passwd这两个参数。其实主要是因为系统一般会有Auth认证的流程,主要是用于认证调用者是否为该系统的合法用户,API中的header(name=barry yan)也正是为了验证用户,当然实际一定是要比这个复杂的多,SDK也会有对Auth认证方式的封装。aws-sdk-go本文的全部代码也已经打包上传到Github,欢迎大家提出issue。获取代码方式:关注公众号【扯编程的淡】回复【sdk。原创 2023-11-12 19:26:35 · 1385 阅读 · 6 评论 -
Go错误处理方式真的不好吗?
平时经常上一些网络平台阅读一些技术讨论的话题,对Go语言方面也有些浅浅的关注,正如标题所问,Go语言错误处理可以说算是网络上开发中对Go语言吐槽最多的点之一,那么,Go错误处理真的很不堪吗?。相反,我觉得Go的错误处理对程序设计来讲十分优雅。原创 2023-10-15 20:58:07 · 434 阅读 · 3 评论 -
程序员的快乐如此简单
最近在GitHub上发起了一个关于Beego框架的小插件的开源仓库,这一举动虽然看似微小,但其中的快乐和意义却是无法用言语表达的。Beego是一个开源的Go语言Web框架,它采用了MVC架构模式,并集成了很多常用的功能和中间件。小插件是指与Beego框架配套使用的、可扩展的、独立的软件模块或组件。通过开发小插件,可以扩展Beego框架的功能,提高开发效率和代码可维护性。原创 2023-09-23 20:51:08 · 3492 阅读 · 3 评论 -
基于Gin框架的HTTP接口限速实践
nil {return//自定义拦截处理器接口限速是保护系统稳定性和API的重要手段。在实际应用中,我们需要根据实际情况选择合适的限速方法,实现对接口的全面限速。通过接口限速,我们可以提高系统的稳定性、保护API、提高用户体验等。原创 2023-09-02 16:52:50 · 2158 阅读 · 7 评论 -
盘点Go语言中那些酷酷的语法
匿名函数、闭包和lambda三者是完全不同的三个概念,但是又有着相互的关联。首先是匿名函数,它是指在代码中定义的没有名字的函数。匿名函数可以被赋值给变量,也可以作为参数传递给其他函数。闭包是指一个函数内部引用了外部函数的变量,并且可以在函数外部被调用或访问时,依然能够保持对这些变量的访问能力。换句话说,闭包是一个函数以及其引用的外部变量的组合体。在Go语言中,闭包的实现非常简洁。当一个函数内部定义了一个匿名函数,并且这个匿名函数引用了外部函数的变量时,Go语言会自动将这些变量捕获到闭包中。原创 2023-08-20 21:49:46 · 213 阅读 · 4 评论 -
【五一创作】再来一篇,Go+Vue前后端分离设计实践
《手把手教你搭建Spring Boot+Vue前后端分离》姊妹篇~原创 2023-04-30 20:21:58 · 1946 阅读 · 11 评论 -
一文搞懂Go读写Excel文件
以上功能只需灵活扩展后基本上就可以覆盖大部分业务了,但是有一点需要注意,在2.5使用Http协议将数据转换为Excel文件并下载这个操作中,需要将文件进行重命名,这个名称可以自定义,也可以由服务端指定,但是需要以相关文件类型的名称做后缀,否则会输出zip压缩文件,很难看懂。今天的分享就到这里~原创 2022-10-29 18:06:57 · 4094 阅读 · 8 评论 -
Go常用设计模式(下)
装饰器模式很容易理解,他就是在我们想要调用方法的时候增加一些额外的操作,这种操作我们就成为装饰,就是让对象经过装饰增加需要的属性或功能。但是Go实现的代理模式和Java实现的相比不太容易理解,所以还需要我们多花一些时间来理解。原创 2022-09-04 22:28:21 · 317 阅读 · 0 评论 -
Go常用设计模式(中)
由于都是属于行为型模式,策略模式和模板方法模式在实现的过程中非常的类似,但不同的是模板方法模式更偏向于部分功能的复用,而策略模式更偏向于多种功能的选用。原创 2022-09-04 14:27:18 · 329 阅读 · 10 评论 -
Go常用设计模式(上)
因为Go语言并不是严格意义上的面向对象的编程语言,而且二十三种设计模式中有一部分是需要使用到面向对象封装、继承、多肽的特性的,因此Go语言并不是完全能够且适合二十三种设计模式,但是经常用到的设计模式也是非常重要的。...原创 2022-08-28 09:17:41 · 638 阅读 · 0 评论 -
浅谈etcd服务注册与发现
微服务是当今互联网领域的广泛概念,也是一种架构演进的结果,微服务的存在让架构设计更加的解耦合,让人员的分工更加明确,当然他的落地实现也并不止步与某一两种方式,在云原生领域的Kubernetes+etcd,互联网领域常用的Spring Cloud全家桶以及Dubbo等都是微服务的具体实现,而etcd也仅仅是微服务中服务注册中心组件角色的一个代表而已。原创 2022-08-21 16:19:08 · 1961 阅读 · 26 评论 -
酷玩Go命令行工具—Cobra
不知大家有没有在使用Git命令、Linux的yum命令、Go命令、Maven命令的时候感觉到非常的酷原创 2022-08-13 17:24:01 · 938 阅读 · 22 评论 -
从4开始,在后端系统中增加用户注册和登录功能
本次我们接着上四篇文章进行讲解《从0开始,用Go语言搭建一个简单的后端业务系统》、《从1开始,扩展Go语言后端业务系统的RPC功能》、《从2开始,在Go语言后端业务系统中引入缓存》以及《从3开始,在业务系统中增加分页功能》,这次是系统中比较核心的功能——用户登录&注册,这个功能其实本应该是最先实现的,但是由于不同因素的影响,放到了本次进行实现,不过也无伤大雅,后期我们都会不断的进行查漏补缺和优化来使我们的项目总体上更加优雅,话不多说,我们开始正文:(1)注册流程(2)登录流程user结构:dao层代原创 2022-07-21 08:54:42 · 809 阅读 · 8 评论 -
一文搞懂Go整合captcha实现验证码功能
最近在使用Go语言搞一个用户登录&注册的功能,说到登录&注册相关,我们油然会产生一种增加验证码的想法,因此着手实现,后来在GitHub上找到了这个名叫captcha的插件,于是就利用文档进行了初步的学习,并融入到自己的项目中......原创 2022-07-15 13:17:39 · 3477 阅读 · 12 评论 -
浅谈Go并发原语
在操作系统中,往往设计一些完成特定功能的、不可中断的过程,这些不可中断的过程称为原语。因此,并发原语就是在编程语言设计之初以及后续的扩展过程中,专门为并发设计而开发的关键词或代码片段或一部分功能,进而能够为该语言实现并发提供更好的支持。...原创 2022-07-12 11:17:02 · 720 阅读 · 4 评论 -
深度思考:为什么需要泛型?
不知道大家平时在进行后端编程的时候有没有考虑过一个概念:泛型编程,就像面向对象、面向接口编程一样,很常用以致于用成为了大家广泛的习惯原创 2022-07-11 07:00:23 · 629 阅读 · 6 评论 -
一文搞懂Go1.18泛型新特性
关于Go1.18版本的发布,当然不只有泛型(Generics)这一个新特性,具体的发布文档可以看下Go官方博客:https://go.dev/blog/go1.18,可以看出除了泛型,还增加了工作区、模糊测试等新特性原创 2022-07-11 06:56:35 · 519 阅读 · 15 评论 -
一文搞懂Go语言Context
sync.WaitGroup是等待一组协程结束。它实现了一个类似任务队列的结构,可以向队列中加入任务,任务完成后就把任务从队列中移除,如果队列中的任务没有全部完成,队列就会触发阻塞以阻止程序继续运行。sync.WaitGroup只有3个方法,Add(),Done(),Wait()。其中Done()是Add(-1)的别名,使用Add()添加计数,Done()减掉一个计数,计数不为0, 阻塞Wait()的运行。示例:效果:在 Go 服务器中,每个传入请求都在其自己的 goroutine 中处理。请求处理程原创 2022-07-03 08:06:51 · 629 阅读 · 6 评论 -
玩转gRPC—不同编程语言间通信
玩转gRPC原创 2022-07-01 08:07:02 · 893 阅读 · 4 评论 -
Go整合Logrus实现日志打印
2 增加标签WithFields3 配置常见参数Formatter一般分为两种:日志级别一共七种:logrus.log文件的内容:5 利用Hooks将日志输出到其他地方只需要在AddHook是添加相应的Hook就可以了原创 2022-07-01 07:58:35 · 1434 阅读 · 0 评论 -
从3开始,在业务系统中增加分页功能
这一节相对比较的简单,增加分页功能的实现利用了gorm的封装的方法并且同步更改了Gin的接收参数,进而实现了分页功能。原创 2022-06-23 09:17:25 · 332 阅读 · 13 评论