自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(345)
  • 收藏
  • 关注

原创 又开发了一个优雅的小工具!

issue2file是一个Go语言开发的命令行工具,可将GitHub仓库Issues导出为本地Markdown文件。主要功能包括:完整保留Issue内容、评论下载、AI智能分析和数据可视化。项目采用模块化设计,包含配置管理、GitHub API交互、Markdown转换、AI集成和图表生成等核心组件。通过Viper处理配置,go-github获取数据,并支持将Issue转换为结构化Markdown。额外功能包括利用AI分析Issue内容,以及生成创建时间趋势、状态分析等可视化图表,帮助开发者更好地管理和分析

2025-08-02 20:27:36 435

原创 Ping命令这种事情用Go也能优雅实现

并发编程:goroutine和channel提供了简洁而强大的并发模型网络编程:标准库提供了丰富的网络编程支持错误处理:Go的错误处理机制简单而有效系统交互:Go可以方便地与操作系统交互这个实现展示了如何将这些特性结合起来,构建一个既实用又优雅的工具。无论是学习Go语言还是网络编程,这都是一个很好的参考案例。完整代码:​。

2025-07-15 19:39:21 406

原创 《Go小技巧&易错点100例》第三十六篇

通过合理使用 gops,开发者可以在不修改代码的前提下,有效提升 Go 服务的可观测性和运维效率。[https://github.com/google/gops] 工具为开发者提供了一套轻量级的诊断解决方案,无需侵入代码即可快速获取运行时的关键指标。包(Go 1.16+)将二进制文件或资源直接嵌入到编译产物中,使这些文件成为可执行文件的一部分。在 Go 语言开发中,进程诊断和性能分析是保障服务稳定性的关键环节。在Go语言中,交换两个变量的值可以通过简洁的。在Go语言中,可以通过标准库的。

2025-06-22 12:08:22 990

原创 用通俗的话解释下MCP是个啥?

MCP的核心设计理念是创建一个开放、统一的协议标准,使不同厂商的大型语言模型(如GPT系列、Claude、Llama等)能够以一致的方式连接到多样化的数据源和工具生态系统。从技术架构看,MCP采用了客户端-服务器模型MCP主机:需要访问数据的应用程序(如Claude桌面版、IDE或AI工具)MCP客户端:管理与服务器的1:1连接,处理通信细节MCP服务器:轻量级程序,通过标准化协议暴露特定功能,连接本地数据源或远程服务。

2025-06-08 20:59:00 1090

原创 《Go小技巧&易错点100例》第三十五篇

在Go语言开发中,我们经常会遇到结构体之间需要相互引用的情况。Go语言中的循环依赖问题看似简单,但可能导致严重的运行时错误。独立的执行栈:每个goroutine都有自己的调用栈,panic和recover机制是基于当前goroutine的调用栈的。设计哲学:Go的设计是让每个goroutine自己处理自己的错误,而不是由父goroutine来管理。但是在Go语言中直接进行结构体的相互引用会默认不符合语法,因此我们就使用接口进行引用。:NewA调用NewB,NewB又调用NewA,从而形成无限循环调用链。

2025-06-08 20:57:13 487

原创 《Go小技巧&易错点100例》第三十四篇

存储在堆中,如果goroutine的执行在for循环结束,那么i的值就是5,此时输出则会是。:将当前循环变量i的值拷贝到新goroutine的栈帧。,当然如果goroutine执行快,那输出就可能是。:创建新的G结构体(包含栈指针、PC等):可能触发当前M让出P,执行其他G。:将G加入全局运行队列或本地队列。我们来分析下代码,每个。而这段代码的临时变量。

2025-05-28 12:31:05 260

原创 CodeBuddy优雅入场!没有最强只有更强!

TerminalAI是一款专为开发者打造的轻量级终端AI对话工具,支持在Linux/macOS终端环境中通过自然语言进行高效交互。它基于Go语言开发,深度融合命令行场景,提供流式响应输出(逐字打印效果)、多轮对话上下文记忆代码片段自动高亮以及系统命令智能推荐。用户可直接输入t "如何监控服务器日志"快速获取解决方案,并支持切换OpenAI云端模型或本地Llama3等开源模型。

2025-05-14 22:59:16 1349

原创 《Go小技巧&易错点100例》第三十三篇

本文介绍了Go语言中的几个关键编程技巧和注意事项。首先,通过validator库扩展自定义校验规则,示例展示了如何验证用户年龄是否成年。其次,使用sync.Pool优化对象复用,特别是在频繁创建和销毁对象的场景中,如JSON编码。接着,讨论了sync.WaitGroup的正确使用方法,强调了在goroutine外部调用Add()以避免竞态条件。最后,探讨了nil的语义陷阱,指出不同类型的nil在比较时的差异,并提供了安全实践建议,如使用类型断言和反射进行深度检查。这些技巧有助于提升代码的健壮性和性能。

2025-05-11 22:35:27 445

原创 《Go小技巧&易错点100例》第三十二篇

本期分享主要介绍了sync.Map的原理与使用方式,以及如何在Go语言中实现有序的Map。 1. sync.Map的原理与使用方式 sync.Map通过读写分离和无锁读设计实现高并发安全,适用于读多写少、动态键空间的场景。其底层采用双存储结构(read和dirty),读优先访问无锁的read,未命中时访问加锁的dirty,并通过动态升级和延迟删除机制优化性能。测试表明,sync.Map在读多写少场景下性能显著优于传统的map+sync.RWMutex。 2. 实现有序的Map 在Go语言中,标准库的map是

2025-05-11 22:34:54 702

原创 《Go小技巧&易错点100例》第三十一篇

本期分享主要探讨了Go语言中的两个内存优化技巧:struct内存对齐和使用空结构体节省内存。首先,内存对齐通过调整结构体字段的顺序,减少填充字节,提升内存访问效率。通过实例展示了未对齐与对齐后的结构体内存占用差异,并总结了内存对齐的规则。其次,空结构体struct{}作为零内存类型,在实现集合、通道信号传递、方法接收器、占位通道、接口实现标记和JSON空对象等场景中,能够有效节省内存。文章还指出空结构体作为字段时可能产生对齐填充,并解释了不同空结构体实例的地址相同现象。这些技巧有助于编写更高效的Go代码。

2025-05-11 22:33:59 564

原创 Go小技巧&易错点100例(三十)

获取Go语言的注释主要用于自动化生成文档(如通过godoc生成API文档)、存储代码元数据(如Swagger规范的路由信息)、指导代码生成工具(如go generate指令)、辅助静态分析(如lint规则例外标记)以及标识测试示例,从而提升代码可读性、维护性及开发效率,实现文档与代码的同步更新。切片共享底层数组的特性,修改一个切片的元素可能会影响其他切片或原数组,具体取决于修改的位置是否在共享范围内。上面我们说明了一个结论就是,Go语言中的切片是底层数组的视图,修改切片时,直接修改了底层数组,导致。

2025-05-05 11:54:42 594

原创 Go小技巧&易错点100例(二十九)

随着 Go 语言的不断迭代,新版本带来了许多实用的标准库函数,使得代码更加简洁、可读性更强。本篇文章主要介绍 Go 1.21+ 版本中的一些新特性,涵盖等常见场景,展示如何利用新特性优化代码。

2025-05-05 11:53:33 612

原创 搞懂Go泛型,看这一篇就够了

泛型是一种编程语言特性,**允许在编写代码时不指定具体的数据类型,而是在使用时再确定具体类型。**原理层面,**Go语言的泛型主要基于类型参数化和类型推断,在编译时为不同类型参数组合生成具体实现,以实现通用且类型安全的代码。**通过泛型,可以编写更加通用和可重用的代码,避免重复代码的出现,提高代码的可维护性和灵活性。在Go 1.18版本中,泛型被正式引入,极大地增强了Go语言的表达能力。// 函数体这里的[T any]表示函数有一个类型参数T,并且T可以是任意类型。any是一个预定义的接口类型,等价于。

2025-05-03 16:36:16 965

原创 Go小技巧&易错点100例(二十八)

for循环select{}

2025-05-03 16:35:36 884

原创 Go小技巧&易错点100例(二十七)

Scan。

2025-05-03 16:34:48 1138

原创 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 1284

原创 快来看!你的Go代码还能更优雅

它提供了一系列具体建议,涵盖命名规范(如变量名简洁性)、错误处理方式(直接返回而非包装日志)、接口设计原则(避免过度抽象)、并发模式(如 channel 使用陷阱)、性能优化点(减少内存分配)等场景,旨在帮助开发者遵循 Go 社区约定俗成的代码风格和设计哲学,确保代码符合 Go 语言"简单、明确、高效"的核心思想,提升项目的可维护性和一致性。良好的风格让代码自带说明书——清晰的错误处理让人一眼看出潜在风险,简洁的接口设计让扩展功能更轻松,规范的并发控制能避免隐蔽的运行时陷阱。一般len方法用于切片上。

2025-04-22 23:21:39 219

原创 Go小技巧&易错点100例(二十六)

在Go中,将字符串转换为字节数组会触发内存拷贝,这会影响性能和内存使用。在大多数情况下,这种开销是可以接受的,但在性能敏感的应用中,需要仔细考虑这种转换的代价。

2025-04-12 20:06:35 678

原创 Go小技巧&易错点100例(二十五)

通过自定义中间件,可以实现日志记录、认证、限流等功能,提高代码的模块化和可维护性。空切片在追加元素时,如果容量足够,可以直接在现有底层数组上进行操作,否则会分配一个新的底层数组。切片和空切片是两个不同的概念,但它们有一些共同点和不同点。空切片有一个底层数组,但其长度和容量都为0,指针部分指向一个有效的零长度数组。:有底层数组(但长度为0),指针指向一个有效的零长度数组,长度和容量都为0。切片和空切片的长度都是0。切片没有底层数组,其指针部分(即数组的指针)为。:没有底层数组,指针为。,长度和容量都为0。

2025-04-12 20:05:50 611 2

原创 这是一份简单优雅的Prompt Engineering教程

通过系统化的提示工程,可使大语言模型输出质量提升40%以上(OpenAI研究数据)。关键在于将模糊需求转化为机器可解析的结构化指令,这本质上是在训练用户的「第二语言能力」。

2025-04-06 21:44:17 1510

原创 一文带你搞懂AI大模型技术版图

别被“人工智能”四个字吓到,其实它就像学做菜:掌握几样核心原料(数据),了解常用厨具(算法),再练几道招牌菜(应用场景),你也能用AI做出让人惊叹的“数字料理”。基础层的内容可能大多数人都不太需要关注到,可以仅作为了解,比如理解GPU/TPU的并行计算原理(如CUDA核心、张量加速),了解cuDNN、OneDNN等加速库的使用场景和DeepSpeed、Megatron的分布式策略(数据并行、模型并行)等等。编译器是静态代码到机器码的“翻译器”,而AI框架是动态模型到硬件指令的“映射器”。

2025-04-06 21:43:35 961

原创 Go小技巧&易错点100例(二十四)

和类型断言/类型开关可以提供一定的灵活性,但也会牺牲一些类型安全性。因此,在可能的情况下,最好使用具体的类型来避免不必要的类型检查和转换。:频繁的类型断言和类型开关可能会对性能产生影响,特别是在大型代码库中。因此,在设计接口和类型时,应该考虑如何减少不必要的类型检查。类型的值时,通常需要进行类型断言(type assertion)或类型开关(type switch)来校验其实际类型。:如果以上步骤都不能解决问题,可能是模块本身的问题,可以联系模块的维护者。类型的值是否满足特定的类型,并获取该类型的值。

2025-03-06 22:49:12 776

原创 Go程序最多可以多少个协程?

Go语言的协程模型为高并发应用提供了强大的支持,使得开发者能够轻松地管理数十万甚至数百万个并发任务。然而,协程数量并非越多越好,合理的协程管理和优化策略是确保系统高效运行的关键。通过理解影响协程数量的因素,应用最佳实践和优化方法,开发者可以构建出既高效又稳定的Go程序,满足现代企业对高并发和高可用性的需求。关于协程的数量与CPU核数,这两者间确实存在一定的关系,但这种关系并不是绝对的。在实际应用中,需要根据应用类型、系统资源限制以及性能监控数据等多个因素来动态调整协程数量与CPU核数的比例。

2025-03-06 22:48:22 952

原创 ETL和ELT还傻傻的分不清?

ETL代表提取(Extract)、转换(Transform)和加载(Load)。这是传统的数据集成方法,广泛应用于数据仓库建设和业务智能(BI)应用中。ELT代表提取(Extract)、加载(Load)、转换(Transform)。随着大数据技术的发展,ELT 逐渐成为现代数据集成的另一种重要方法。ETL 和 ELT 作为两种主要的数据集成方法,各有优劣。我们在选择时,应综合考虑数据规模、处理复杂度、现有基础设施以及业务需求。随着技术的发展,ELT 越来越受到青睐,尤其是在大数据和云计算时代。

2025-03-06 22:46:54 917

原创 Go小技巧&易错点100例(二十三)

命令将依赖添加到我们的项目,这个依赖可能会有其他依赖,从go.mod文件中应该可以看出,大多数情况下使用一次。在 Web 浏览器中打开此文件以查看模块的依赖项关系图。不可读的乱码,并不是我们期望的"12345"。扩展:可以看下官方文档对go.mod的说明。什么是mod依赖关系,就比如我们使用。然后运行一下就输出了想要的字符串。这将在当前目录中生成一个名为。

2025-02-25 23:21:02 588

原创 Go小技巧&易错点100例(二十二)

对于包含不可比较字段的结构体,如果需要比较它们,你通常需要实现自定义的比较逻辑,比如通过遍历所有可比较的字段并逐一比较它们,或者使用反射(reflection)来动态比较结构体中的字段(但请注意,反射可能会影响性能,并且可能会使代码更难理解和维护)。Go语言中的结构体是否可比较取决于其字段的类型。如果结构体仅包含可比较的字段,则可以使用。

2025-02-25 23:20:09 1078

原创 DeepSeek回答:AI时代Go语言学习路线

Go语言的简洁性、并发能力和云原生基因使其在AI时代持续占据优势。深耕云原生:掌握K8s生态,成为基础设施层专家。拥抱AI工具:用AI提升编码效率,同时探索Go在AI工程化中的新场景。保持底层思维:理解运行时机制(如GC算法),避免成为“调参工程师”。Go语言以其简洁、高效和并发能力成为现代开发者的首选语言之一。从基础语法到高并发编程,再到云原生架构设计,Go的学习路径清晰且实用。在AI时代,Go在AI基础设施、模型部署和高性能数据处理中展现出独特优势。

2025-02-25 23:17:41 1528

原创 Go小技巧&易错点100例(二十一)

errors.Is。

2025-01-05 22:01:19 876

原创 一文搞懂Clickhouse的MySQL引擎

ClickHouse是一个开源的分布式列式数据库管理系统,专为在线分析处理(OLAP)设计。它具备高性能、可扩展性强、支持SQL查询等特点,能够实时生成分析数据报告。ClickHouse使用列式存储和向量化执行等技术,提高了查询性能和数据压缩率,非常适合大数据分析和实时数据查询场景。这篇文章我就来分享一下Clickhouse中的MySQL引擎。

2025-01-05 22:00:24 1282

原创 Go小技巧&易错点100例(二十)

如果当前容量大于等于1024,扩容后的容量会按照增长因子(默认为1.25)来计算,即新的容量为原容量的1.25倍。Go语言的slice扩容策略在不同的版本和slice容量大小下有所不同,但总体思路是相似的,即创建一个更大的底层数组,并将原始数据复制到新数组中。:用于向切片末尾追加一个或多个元素,并返回一个新的切片(可能是原切片的扩展,也可能是新分配的切片)。会分配一个更大的切片,并将原切片的内容复制到新切片中,然后追加新的元素。类型转换是昂贵的操作,应该避免在性能敏感的代码中进行不必要的类型转换。

2025-01-01 10:40:24 543

原创 Go小技巧&易错点100例(十九)

正文:在Go语言中,goto语句和标签(label)提供了一种跳转到程序中的另一个位置的方式。虽然这种特性在解决某些类型的复杂逻辑时可能很有用,但过度使用goto可能会导致代码难以理解和维护。因此,建议谨慎使用,并优先考虑使用循环、条件语句等更结构化的控制流机制。

2024-12-31 23:08:14 877

原创 文件传输工具FTransferor<优化篇>

通过本次优化,我们为 FTransferor 增加了对 HTTP 协议的支持,显著提升了其在不同网络环境下的适用性。未来,我们计划进一步优化工具的交互体验,例如通过 Web 界面实现更加友好的操作方式。

2024-12-31 23:05:04 1000

原创 手撸了一个文件传输工具

通过手撸这个文件传输工具,我对TCP编程有了更深刻的理解,其实有些功能并不需要利用HTTP、RPC等上层协议进行实现,更别说各种各样的框架了,最简单的功能往往TCP协议就足够了。

2024-12-01 22:02:23 4384

原创 27加餐篇:gRPC框架的优势与不足之处

gRPC作为一个现代的、开源的远程过程调用(RPC)框架,在多个方面都展现了其优雅之处,同时也存在一些不足之处。这篇文章我们就相对全面的分析一下gRPC框架那些优雅的地方和不足的地方。

2024-11-27 23:56:09 222

原创 浅谈Go语言Optional模式和Builder模式

Optional模式和Builder模式都是Go语言中用于对象构建和配置的重要设计模式。Optional模式通过函数选项提供灵活的配置选项,适用于参数较少且相对简单的情况。而Builder模式则通过逐步构建对象并提供多种配置选项,适用于构建复杂对象的情况。在选择使用哪种模式时,应根据具体需求和对象复杂程度进行权衡。

2024-11-20 23:29:56 1089

原创 带你用Go实现二维码小游戏(下)

到这里我们就完成了《Go语言实现二维码小游戏》从设计、接口开发再到监控运维的全部过程,希望你能从中学到东西,当然有些地方做的还不是很完善,因此在后续可能会更新一篇文章主要针对已有项目的优化,也希望屏幕前正在阅读的你能够留言给出优化建议。

2024-11-07 21:41:26 1100

原创 带你用Go实现二维码小游戏(中)

DPI intX, Y intX, Y int为什么设置三个结构体呢?主要是因为在画证书的时候需要把证书的模板里填上内容,而内容又分为图片内容和文字内容,如图:因为图片内容和文字内容的属性大部分都不一样,所以独立出来了两个结构体。然后同样是Optional的模式= "" {opt(r)return r。

2024-10-30 23:00:09 545

原创 带你用Go实现二维码小游戏(上)

先看整个业务的流程图,游戏的核心就是拼图+二维码生成体验地址(目前仅支持PC端):游戏流程1)开始输入你的用户名,并选择你要拼图的图片,然后点击开始:2)选择图片完成后会出现游戏页面,进行拼图游戏:3)拼图完成后会进行提示,点击确定页面跳转到二维码:4)扫码,获取证书Go实现HTTP服务相对简单,只需要启动一个tcp的Listener,绑定端口,与HTTP Server关联,然后启动HTTP服务,如下代码,是我们提供的两个HTTP接口和静态资源地址的指定。if err!= nil {

2024-10-27 22:31:41 877

原创 我的写作成长之路

我发表了自己的第一篇技术博客,那一年我在上大二。到今天为止,我已经的时间,包括多个技术社区和写作平台,在这期间创作了包括博文和技术专栏、公号文章共。回想我这几年的写作经历,贯穿了校园和工作时期,颇有些值得回味。刚好又到了一年的1024,于是就想向大家真诚的分享一下我的。

2024-10-23 21:27:11 1032

原创 Go小技巧&易错点100例(十八)

正文:有时候我们代码里会定义很长的数字,虽然计算机程序能支持很大的数据的计算,但是对我们来说,可读性是一个需要考虑的点,特别是1后面全是0的时候。但是这个问题在Go语言中是可以通过一个小技巧来解决的,如下代码:被赋值为10,000,000,而也使用了相同的值,但是使用了下划线作为千位分隔符。从Go 1.13开始,数字字面量中可以使用下划线******来增强可读性,但它不会改变数字的值。**所以,和是等价的。直接看代码:是一个占位符,它告诉函数在这个位置插入一个字符串类型的变量。方括号中的数字表示后面参数

2024-10-22 22:10:30 571

springboot-dubbo-master.zip

springboot-dubbo-master.zip

2021-08-27

sp_mybatis.zip

sp_mybatis.zip

2021-08-27

sp_vue.zip前端项目

sp_vue.zip前端项目

2021-08-27

MavenSSM.zip

IDEA使用Maven整合SSM框架,spring5和mysq5.5l数据库,其中包括配置文件和web.xml的编写

2020-07-16

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除