IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Go

共 52 篇相关文章

IT 累计浏览 58

等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go

seq库为Go语言引入链式管道编程,解决传统嵌套函数调用的可读性问题。Go语言因泛型限制,此前库如lo只能采用从内往外的写法,导致代码阅读顺序与数据流相反。Go 1.27引入泛型方法,允许方法定义类型参数,使seq得以实现从左到右的链式调用。库基于iter.Seq接口,支持Filter、Map、Sum、GroupBy、Distinct等操作,并具备惰性求值特性,可处理无限序列和短路优化。示例展示分组统计、去重求和、前缀和计算、滑动窗口等实用场景,强调代码流与数据流一致的优势。开发过程中使用AI辅助,但核心设计基于需求文档。seq需要Go 1.27版本,提升了Go代码的表达力和维护性,为函数式风格编程提供支持。

IT 累计浏览 65

使用 CLIProxyAPI, 让最新的 Codex 能够支持国内的各大模型

CLIProxyAPI 是一个轻量级 AI API 代理服务器,核心功能是实现 OpenAI Responses API 与 Chat Completions API 之间的双向格式转换,从而解决 OpenAI Codex CLI 仅支持 Responses API 而国内模型如 DeepSeek、GLM、Kimi 等仅提供 Chat Completions API 的兼容性问题。工作原理涉及请求方向的格式映射(如将 instructions 转换为 system message)和响应方向的流式 SSE 数据支持。安装通过 Git 克隆和 Go 编译完成,配置灵活,支持多 Provider 和模型别名设置,配置文件采用 YAML 格式并支持热加载。路由机制允许通过 prefix 前缀或 alias 自动匹配指定 Provider,避免重名冲突。文章提供了详细的配置示例,包括添加新 Provider 和模型,以及关键配置项说明。此工具简化了 Codex CLI 与国内 AI 模型的集成,适用于有 API 代理需求的开发者。

IT 累计浏览 46

告别死锁和陈旧语法、告别性能瓶颈:三个开源 Skill,新手Gopher 秒变 Go 语言大神

文章聚焦Go语言开发者面临的三大核心挑战:并发死锁与数据竞争、性能瓶颈分析、代码语法现代化。针对并发问题,介绍AI Skill chao-go-sync,它整合并发编程知识,能诊断潜在竞态条件、锁竞争等bug,并推荐如RWMutex或WaitGroup.Go等优化方案。针对性能问题,chao-go-perf Skill提供数据驱动分析,指导基准测试编写、逃逸分析解读、CPU缓存优化及版本感知的性能改进。针对代码现代化,modern-go Skill基于go.mod版本自动应用28种语法转换规则,如将interface{}替换为any、使用slices.SortFunc等,确保代码符合最新Go惯用法。这些Skill嵌入AI编码助手后,可实时辅助开发者:例如分析项目并发缺陷时,提供详细报告和修复建议;检查性能问题时,指出热点函数和内存分配;升级旧代码时,自动执行转换并输出变更总结。文章通过实际案例演示Skill功能,并给出安装命令,强调这些开源工具如何降低Go开发门槛,提升效率与代码质量。

IT 累计浏览 97

百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形

baize 是百度开源的毫秒级网络监控工具,针对传统监控难以捕获的偶发性轻微丢包和比特翻转问题设计。它通过每秒5000包的高频探测,实现0.1%丢包率的精确检测,统计窗口可调至100ms。核心特性包括ECMP全路径覆盖,利用确定性端口轮转算法探测所有哈希路径;无需时钟同步的单向丢包检测,通过携带上一窗口发包信息在Server端无状态还原,避免NTP依赖;以及互补比特翻转检测,使用四种salt填充模式精确识别校验和漏检的翻转。性能优化采用Raw IP Socket和BPF过滤器减少内核开销,20MB Socket Buffer应对突发,8路并行读和无锁设计确保高吞吐。工具采用JSON配置驱动,单进程双角色部署,支持批量自动化,内置pprof便于调试。典型应用包括集群间监控、机房间探测、混合云链路等场景,与临时排查工具bitflip互补,专注于长期持续监控,为网络运维提供细粒度数据支撑。

IT 累计浏览 35

别只盯着gopacket了,看看这个强大的网络库

本文介绍了Go语言的新网络库goscapy,它是Python Scapy在Go生态的移植,旨在解决gopacket等传统库API繁琐的问题。goscapy提供两种核心数据包构造方式:一是流式Builder API,通过链式调用与类型安全的`Over()`方法逐层叠加协议,实现清晰的分层构建;二是针对常见协议组合的快捷函数,可实现一行代码完成复杂数据包构造。其核心优势在于自动化了繁琐的网络协议细节,通过BuildHook机制在序列化时自动计算各层校验和(包括伪头部),并利用BindingRule在层间绑定时自动设置正确的协议类型字段(如EtherType、IP Protocol),避免了手动设置易出错的痛点。这种设计显著提升了网络编程的效率和代码可读性,特别适用于需要快速构造、发送网络数据包并进行测试或探测的场景,为Go开发者提供了更优雅、强大的网络工具选择。

IT 累计浏览 47

套壳不丢人!我用Go+AI搓了一个Agent统一编排框架,ClaudeCode-Codex-Pi全被我包了

作者在智能体开发中,从langchain转向套壳Claude Code、Codex、Pi等现有AI Agent,认为套壳是高效利用现成工具的合理方式。这些Agent已发展为通用智能体,不仅能处理代码任务,还可用于多种场景。面对多个Agent各自为政、胶水代码繁杂的问题,作者用Go语言开发了agent-wrapper框架,提供统一编排层。通过简单API,一行代码即可注册和切换不同Agent,如Claude Code、Codex、Pi等。框架核心功能包括三道安全闸门:审批拦截允许自定义工具调用权限,如只读操作而拒绝写入;预算监控在Token消耗超阈值时自动中断,防止成本失控;上下文压缩和自动重试处理上下文超限,通过滑动窗口和摘要策略提升稳定性。此外,支持会话恢复,通过SessionID跨会话保持上下文连续性,便于跨进程或跨天持续任务。框架既支持命令行测试,也可作为Go库嵌入项目,实现零额外进程和协议开销。作者通过在故障分析产品中的实际应用,展示了如何专注于业务逻辑而非基础设施。最终,agent-wrapper解决了Agent集成的安全性、预算管理和跨平台问题,将实验性套壳转化为生产就绪的解决方案。

IT 累计浏览 123

Loop Engineering 实践:我把 RDMA 开发库移植到 Go 语言,花费 239 块钱

作者为了在Go语言中实现高性能RDMA库,采用Loop Engineering方法进行自动化移植实验。Loop Engineering的核心是将复杂任务拆分为可管理的小单元,在循环中逐步执行实现、审查和发布。实验从一份PRD出发,生成15个依赖issue,通过AI Agent自动化处理,覆盖设备枚举、PD/MR分配、QP创建、TCP握手和perftest工具构建。AI在macOS上生成代码,使用stub实现确保跨平台编译。但流水线中审查步骤未真正执行,导致cgo与rdma-core库的兼容性问题未被及时发现。真机在Linux服务器编译时,暴露imm_data访问错误和ibv_query_port类型不匹配等致命bug,此外还有内存屏障缺失、资源泄漏等运行时问题。修复阶段通过静态分析工具和真机测试逐步解决,包括编写C辅助函数、调整unsafe.Pointer用法和引入原子操作。最终项目包含3981行Go代码和16个PR,花费239元。文章展示了Loop Engineering在结构化任务中的效率,同时强调了人工审查和硬件环境验证的必要性,对后端系统开发有实践参考价值。

IT 累计浏览 43

傻瓜式RDMA高性能网络开发:从零跑到 400 Gb每秒

RDMA(远程直接内存访问)是一种高性能网络技术,通过内核旁路、零拷贝和CPU卸载机制,使网卡能直接读写远程内存,实现微秒级延迟和数百Gb/s吞吐,广泛应用于AI训练、分布式存储等领域。但其编程复杂,涉及队列对(QP)、完成队列(CQ)、内存区域(MR)等术语,标准流程繁琐易错。本文介绍了gordma,一个用Go语言封装的RDMA库,提供两套API:高级API类似标准net包,简化开发;底层API直接映射RDMA原语,允许精细控制。在400Gb/s RoCE v2网卡实测中,gordma高级API吞吐达28Gb/s,底层API达232Gb/s,原生基准为392Gb/s。文章详解了RDMA核心概念,包括历史发展、术语速记、传输类型,并演示了使用perftest工具进行基准测试,讨论了单位换算和环境因素影响。gordma为Go开发者提供了从零开始RDMA开发的路径,平衡易用性与性能,适用于高性能计算场景。

IT 累计浏览 46

amd64 微架构级别对 Go 程序性能提升多少?

文章探讨了Go 1.18引入的AMD64微架构级别(v1至v4)对程序性能的影响。通过设置GOAMD64环境变量,开发者可以选择目标指令集级别:v1为默认基线,v2添加popcnt等指令,v3支持AVX2,v4包括AVX-512。作者以Roaring Bitmaps压缩位集库为例进行基准测试,该库依赖种群计数和位操作。测试在Intel Xeon Gold 6548N处理器上使用Go 1.26.2完成。结果显示,v2级别启用popcnt指令后,位图容器的种群计数操作耗时减少约43%,而v1级别因使用软件回退实现而性能较低。v3级别通过AVX2向量化进一步优化,例如从密集位图构建容器时性能提升38%,集合操作减少22%。v4级别未带来改善,因为Go编译器尚未生成AVX-512指令。文章指出,现代硬件应至少使用v2级别以免费获得性能增益,v3值得探索,但v4当前无效。结论强调编译器标志对性能的关键作用,并揭示了Go编译器在利用新指令方面的局限,为开发者提供了实际调优指导。

IT 累计浏览 38

Go 实验特性详解

Go语言在版本发布中引入实验性特性,旨在通过用户反馈优化后正式集成。这些特性可能表现为标准库新包、编译器运行时改动或行为变更。例如,Go 1.24的testing/synctest包在反馈后调整API并进入通用可用阶段;Go 1.25的新垃圾回收器设计提升性能,在Go 1.26成为默认选项;Go 1.21的循环变量语义变更消除了历史bug,作为实验发布以测试兼容性。实验特性生命周期多样:通常默认关闭,需通过GOEXPERIMENT环境变量选择加入;若反馈积极,经过版本迭代可能变为默认开启。部分特性如内存arena因负面反馈而搁置,Go 1.22的编译器内联逻辑持续评估。永久实验特性如FieldTrack结构体字段追踪和StaticLockRanking死锁诊断工具则长期存在但无意默认启用。截至Go 1.26,当前实验特性包括JSONv2改进JSON处理、RuntimeSecret清零内存、SIMD访问架构特定操作等。控制实验特性通过GOEXPERIMENT实现:启用时设置逗号分隔小写名称,禁用则添加no前缀,如GOEXPERIMENT=jsonv2,nogreenteagc。开发者应关注GreenTeaGC新垃圾回收器和Dwarf5调试信息生成等特性,它们默认开启但保留临时退出选项。理解这些机制有助于Go开发者利用语言演进,平衡创新与稳定性。

IT 累计浏览 84

Seven Player:Windows上播放115网盘视频的增强工具

作者因115网盘的大空间和高速度优势,开发了Windows桌面播放器Seven Player。技术选型中,比较了Electron、Wails 3和Tauri 2.0,基于Go语言的熟悉度和Wails 3的轻量特性,选择Go + Wails 3框架。前端采用Vuetify组件库,数据库使用SQLite。开发过程中利用AI工具Codex辅助,但115开放平台审核暂停,转而参考开源项目webdav-115drive,通过Cookie获取数据并转出WebDAV协议。应用实现了文件浏览、外部播放器调用、云下载链接等功能,并自动过滤广告信息,以徽章显示技术名词。目前支持MPV、PotPlayer等主流播放器。资源库功能因数据刮削复杂而未实现。软件以Apache License 2.0开源,发布1.0.0版本,旨在简化115用户在Windows上的视频播放体验。

IT 累计浏览 77

重新审视 MinIO:许可证、归档、社区 fork 与我的 Apache 2.0 基线

MinIO作为主流对象存储软件,近期开源生态发生重要变化:许可证从Apache 2.0切换到AGPLv3,官方GitHub仓库被归档并停止维护,社区版预编译二进制也不再发布。本文重新审视了MinIO的当前状态,深入比较了PGSTY/Silo和JuiceData/minio两个社区fork的定位、技术实现与许可证边界。作者基于切换AGPLv3之前的最后Apache 2.0版本(RELEASE.2021-04-22T15-44-28Z),构建了自己的soulteary/minio主线,将原有HTTP路由替换为高性能的gofiber/fiber/v3框架,优化收敛了Bucket Notification和Gateway功能,并升级Go运行时至1.26版本。这些技术修改旨在保持宽松许可证的同时,提升代码可维护性与性能,为后续OtterIO项目建立稳定基线。文章分析了许可证变更对开源社区的影响,并展示了如何通过技术选型应对软件许可问题,为开发者提供实用参考。

IT 累计浏览 62

Kakapo:使用 Wails v3、Go 和 Echo 构建一个本地翻译工作台

Kakapo 是一个本地桌面翻译工作台,基于 Wails v3、Go 和 Echo 构建,集成多个 OpenAI 兼容模型如 Kimi、DeepSeek 和 OpenAI,支持多模型并行翻译、结果比较、回译、系统朗读和本地历史记录。项目配置存储在 settings.json,API Key 通过 macOS Keychain 安全保存,历史记录存储在 history.json。文章详细记录了从零开始实现 Kakapo 的过程,探讨了 Wails v3 框架如何结合 Go 语言和系统 WebView 构建跨平台桌面应用,以及 Echo Web 框架在处理后端逻辑和 API 集成中的作用。文中分析了在桌面工具场景下使用 OpenAI 兼容接口进行多模型翻译的实践,包括并行处理模型响应、比较翻译结果、实现回译功能和集成系统朗读的实现方式。同时,讨论了数据存储策略、安全性考虑(如使用 Keychain 管理敏感信息)以及在实际开发中遇到的技术取舍和优化方案。通过本文,读者可以了解如何利用现代技术栈构建功能丰富的本地 AI 辅助工具,获取设计和实现方面的经验。

IT 累计浏览 40

Go之禅 - 基于Rob Pike思想的Go语言哲学

本文系统阐述了 Rob Pike 思想下 Go 语言的核心设计哲学,其精神可凝练为对简单、清晰与组合的极致追求。哲学强调代码应直接解决问题,拒绝过度聪明的炫技,优先保障可读性。在架构上,Go 抛弃了传统的类继承,转而采用更灵活的接口和结构体嵌入来实现组合。对于接口,推崇小而专注的设计,主张通过实际使用来发现接口,避免预先设计庞大复杂的契约。并发模型是其另一大支柱,明确区分了并发(结构)与并行(执行),并通过“通过通信共享内存”的 channel 机制,为安全高效的并发提供了原生支持,避免了昂贵的互斥锁开销。错误处理上,Go 将错误作为一等值进行显式返回与处理,而非依赖异常机制,这使得程序的控制流和异常路径更加清晰可见。此外,哲学还包括拥抱 gofmt 实现的强制代码风格统一、在简单重复与引入复杂依赖间做出务实权衡、聚焦于优化算法与选择恰当数据结构等实践准则。总体而言,Go 之禅体现了一种实用主义语言设计观,它不追求语言特性的繁复,而是致力于提供一套简洁有效的工具组合,以帮助开发者写出可靠、高效且易于维护的系统。

IT 累计浏览 51

扫描全国的公网IP需要多久?

作者基于个人兴趣,在一台旧款4核迷你主机的家庭网络环境下,测试了扫描中国大陆所有公网IP地址的耗时。最终扫描约3.43亿个地址,发现其中约592万个IP可达,总耗时约1小时2分58秒。该测试旨在探索使用单台设备探测全国范围内运营商与云服务商网络连通性、识别故障或劫持情况的技术可行性。 文章核心是介绍了一款由作者重构的网络扫描程序的实现。新版本摒弃了之前依赖libpcap库的gopacket方案,完全基于Go标准库中的icmp与ipv4扩展包构建,无需启用CGO,便于部署与编译。程序架构采用并发模型,主要由三个goroutine协作:一个负责解析APNIC提供的IP网段列表并分发任务;一个负责批量构造并发送ICMP回显请求报文;一个负责监听并接收ICMP回显应答,最终将存活IP输出。代码通过设置BPF过滤器优化性能,并使用进程ID作为ICMP报文标识以准确匹配响应。整个扫描引擎仅约200行代码,展示了使用Go语言进行高效网络编程的典型范例。

IT 累计浏览 37

啥时候等到Go官方支持SIMD?

Go语言目前缺乏官方的SIMD(单指令多数据流)支持,这一议题在官方问题追踪中持续讨论但进展缓慢。SIMD能显著提升图像处理、机器学习等计算密集型任务的性能,是C++、Rust等语言已具备的能力。Go语言追求简洁性与可移植性,而SIMD实现需针对不同硬件架构进行优化,两者存在设计冲突,导致官方支持犹豫不决。当前,标准库中已局部引入SIMD指令(如Go 1.24中Swiss Tables的实现以及crypto/sha256包),但编译器并未提供自动向量化功能。社区为弥补空缺,开发了第三方库如kelindar/simd、alivanz/go-simd和pehringer/simd,它们通过汇编或自动向量化技术在Go中实现了SIMD操作,但这些方案需要开发者自行管理,可移植性和维护性有限。总体而言,Go在高性能计算领域的潜力受限于SIMD支持的缺失,未来官方的整合将对性能优化至关重要。

IT 累计浏览 34

Gin + go:embed 实现静态资源嵌入

本文介绍了如何利用 Go 1.16 引入的 `go:embed` 特性,将前端静态资源文件在编译时嵌入 Go 程序,从而构建单文件部署的 Web 服务。通过声明 `//go:embed` 指令,可将指定目录或文件打包为 `embed.FS` 虚拟文件系统。结合 Gin 框架,开发者可以使用 `http.FS()` 包装该文件系统,并通过 `StaticFS` 或 `NoRoute` 方法将其作为静态资源提供。特别是利用 `NoRoute` 回调,可以在未匹配到 API 路由时自动将请求转发至静态文件服务器,从而省略路径前缀,实现 API 接口与静态资源的统一部署。这种方式简化了发布流程,并避免了跨域问题。

IT 累计浏览 29

go:embed 嵌入 HTTPS 证书

这是一篇关于使用Go语言`go:embed`功能将HTTPS证书嵌入可执行文件的技术教程。文章首先阐述了为Web服务启用HTTPS的必要性,即使在内网环境中,以保障数据传输安全、完整性并规避浏览器限制。针对内网无域名的场景,文章重点介绍了使用`openssl`生成自签名证书的具体步骤。核心部分详细演示了如何利用`go:embed`指令在编译时将证书文件(`.crt`与`.key`或合并后的`.pem`)嵌入程序变量,并解决Gin框架无法直接加载嵌入式证书的问题。通过自定义`http.Server`的`TLSConfig`配置,成功加载字节形式的证书,最终实现了将静态资源与HTTPS证书一并打包、开箱即用的Gin HTTPS服务。教程明确了`RunTLS`方法不适用于此场景,并展示了最终效果。

IT 累计浏览 30

Go Server HTTP 302 跳转 HTTPS

这篇笔记从Go服务器部署HTTPS后的实际问题切入,作者遇到了HTTP 400错误——当用户直接输入IP地址访问时,浏览器自动补充HTTP协议,与HTTPS服务冲突,导致服务器返回“Client sent an HTTP request to an HTTPS server”。根因在于Go官方没有内置HTTP到HTTPS的重定向功能,而手动修改协议方式不够便捷。 作者最初尝试在Gin中间件中检测TLS报文,但发现多次请求后识别不可靠。后来发现开源库 `hlfhr`,它通过劫持 `net.Conn` 实现自动重定向。具体方案是加载证书后,用 `hlfhr.New` 创建服务器并监听端口,实现访问HTTP时自动302跳转HTTPS。作者还fork项目调整状态码为307,避免POST请求被误转为GET,提升兼容性。 效果上,改造后用户访问HTTP地址会自动跳转至HTTPS,解决了体验痛点。对于Go开发者,这提供了一个轻量级的实现思路。

IT 累计浏览 155

让 AI 把我的 PHP 博客重写成 Go

作者尝试将一个运行近20年的古老PHP博客系统重构为Go语言。项目启用了Claude Code的Superpowers插件,通过结构化问答明确了技术选型:采用Go的Gin框架、GORM作为ORM,并构建Vue 3 SPA前端,保持与原MySQL数据库100%兼容。AI助手在确认需求后,自动生成了包含项目结构、API设计等详细规划文档,并利用子代理驱动开发模式执行了约22个开发任务,最终生成一个约35MB的单文件可执行程序,集成了前端SPA。 实现过程并非一帆风顺,主要挑战在于处理历史遗留数据。最复杂的是对UBB标记语法的解析与渲染,因内容已含HTML实体转义且标签存在嵌套,作者编写了34个测试用例才覆盖所有边界情况。此外,需为三代不同的旧URL格式实现301重定向以保持外链有效,并调整了附件链接的解析逻辑以适配反向代理路径。数据库中的标签词频统计也因数据陈旧而改为通过关联查询实时计算。 最终项目产出包括约2800行Go后端代码和2000行Vue前端代码,实现了完整的REST API、JWT认证、防盗链等40余个端点。作者评价整个过程耗时约两三小时,主要负责需求反馈与测试,AI则负责编码、构建与部署,认为这种人机协作模式展现了AI在复杂工程任务中的实用潜力。