喵个咪的博客喵个咪的博客
喵个咪的技术与生活
文章列表
文章分类
文章标签
时间线
喵个咪的技术与生活
文章列表
文章分类
文章标签
时间线
健康养生 1fastapi 1随笔日志 1产品设计 1ASIO 2cron 1rclone 1flutter 1RxDart 1Make 2CMake 2Ninja 1设计模式 2Cache Aside Pattern 1缓存设计模式 1汽车 1go 2CDC 1PostgreSQL 6Centos 1docker 1CLion 1云手机 1GoogleTest 1Cococs2dx 1Cocos Creator 1代码注释 1IDE 3Python 4TRC20 1C++ 8类型转换 1CQRS 1Kafka Streams 1Bazel 2Docker 21Go 6crontab 1客户留存率 1EFK 1RustDesk 1Jitsi Meet 1Traefik 1Swagger 1Docker Hub 1VIM 1Word 1VBA 1Doris 1量化交易 2Flutter 13Widget 1Ent 2SQL 2Excel 2配色 1TypeScript 3C# 1Sealed Class 2微信小程序 1人脸识别 2RK3588S 1Android Studio 1iOS 1GetX 1鸿蒙 1字体渲染 1期货 1Futures 1地理围栏 1GEO 1Git 2Golang 99Go-Kratos 86GoWind 41UBA 1算法 5WebRTC 2MongoDB 1Headless CMS 1WASM 1随机种子 1MacOS 3Ubuntu 2GCC 1Godot 1Clang 1Superset 1CentOS 1OpenCV 1咖啡 1Android 1Google Play 1Unity WebGL 1Dexie 1IndexedDB 1htop 1IM 1Postgresql 1Mattermost 1Qt 4TL;DR 1Swift 1Javascript 2JetBrains 1Typescript 1libuv 1Linux 1本地化 1国际化 1状态同步 1帧同步 1泡泡水 1Markdown 1机器学习 1QTT 1MQTT 2MSB 1LSB 1npm 1pnpm 1yarn 1OCR 1OHLC 1OLTP 1OLAP 1OpenAI 1OpenAPI 1数织 1Ping 1人体姿态识别 1全文搜索 1交叉表 1Prometheus 1Protobuf 2Docx 1QUIC 1Reactor 1Redis 1REST 1CoTURN 2RBAC 1Selenium 1基准测试 1Spine 1股票 1Roguelike 2ThingsBoard 3时间戳 1时序数据库 3交易所 1Unity 2用户画像 1PgBouncer 1Vite 1Vue 1WebGL 1加权随机 1BI 1数据血缘 1Roguelite 1Protocol 1WiFi 1WSL 3Windows 4
传统 CMS 太笨重?试试 Headless 架构的 GoWind,轻量又强大

Date: 4/9/2026Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

做企业官网、资讯平台、多端内容分发,你是否也被传统 CMS 的“笨重”折磨?部署时要配置一堆环境,启动慢到让人耐心耗尽,多端适配还要重复开发,稍微调整一下页面就要动后端代码,内存占用居高不下,运维起来更是费心费力。

在“轻量高效、多端融合”成为主流需求的今天,传统 CMS(如 PHP 系的 WordPress、织梦,Java 系的 Jeecms)的单体架构早已跟不上节奏。而 Headless 架构(无头架构) 的风行 GoWind,凭借 Go 语言原生优势与 Headless 核心设计,彻底打破传统 CMS 的桎梏,用“轻量不简陋、强大不复杂”的体验,成为中小企业、开发者的首选 CMS 解决方案。

微服务技术选型:从生态架构视角看go-kratos的不可替代性

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

在 Go 语言微服务生态中,单一框架的能力边界往往决定项目上限,而 “核心框架 + 生态扩展” 的架构协同性,才是长期支撑业务迭代的关键。面对 Gin、Go-Micro、Kitex 等选项,go-kratos 不仅自身架构卓越,更通过kratos-transport(通信扩展)、kratos-authn/authz(安全扩展)、kratos-cli(工具扩展)及go-wind-admin/cms/go-crud(应用模板),构建了 “核心定义标准、扩展补全能力、应用落地业务” 的全链路架构体系。本文从架构视角拆解这一生态,解析技术选型优先选择 go-kratos 的深层逻辑。

Kratos微服务框架实现权鉴 - Zanzibar

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

用户的权限管理对每个项目来说都至关重要。不同的业务场景决定了不同的权限管理需求,不同的技术栈也有不同的解决方案:

  1. 如果你在写一个Ruby On Rails应用,那你可能会选择cancan;
  2. 如果你在写一个Java Spring应用,那你可能会选择Spring Security 或者 Apache Shiro;
  3. 如果你正在使用K8S,那你很可能需要与K8S的鉴权模块打交道。
golang微服务框架Kratos实现Websocket聊天室

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

什么是WebSocket

WebSocket 协议主要为了解决基于 HTTP/1.x 的 Web 应用无法实现服务端向客户端主动推送的问题, 为了兼容现有的设施, WebSocket 协议使用与 HTTP 协议相同的端口, 并使用 HTTP Upgrade 机制来进行 WebSocket 握手, 当握手完成之后, 通信双方便可以按照 WebSocket 协议的方式进行交互

WebSocket 使用 TCP 作为传输层协议, 与 HTTP 类似, WebSocket 也支持在 TCP 上层引入 TLS 层, 以建立加密数据传输通道, 即 WebSocket over TLS, WebSocket 的 URI 与 HTTP URI 的结构类似, 对于使用 80 端口的 WebSocket over TCP, 其 URI 的一般形式为 ws://host:port/path/query 对于使用 443 端口的 WebSocket over TLS, 其 URI 的一般形式为 wss://host:port/path/query

GO微服务框架Kratos上传文件

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

首先,我们需要知道:Kratos能够上传文件。

其次,我们需要知道:需要一些手工代码来支撑(不能够代码生成一波流)。

最后,我们所有的文件都落地到MinIO当中。对于使用过各种上传方案的我而言,MinIO是一个非常完美的文件解决方案。

在这里,我们不讨论前端的上传,我们只讨论后端的上传。我另外有一篇偏向于前端的文章,有兴趣的同学可以阅读它:JavaScript/TypeScript前端实现文件上传到MinIO。

跟我一起用Golang微服务框架Kratos实现一个用户行为分析系统(UBA)

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

本文将带你了解什么是 BI(商业智能) 和 UBA(用户行为分析),并且使用go语言和微服务框架kratos去实现一个UBA系统。

这个系统简单的描述就是:前端通过埋点SDK上报前端采集到的埋点数据,后端的代理服务(Agent Service)接收到了埋点数据之后,将数据入列到Kafka当中,然后我们消费Kafka当中的消息,入库到ClickHouse当中,分析服务对入库的埋点数据进行分析并且生成报表,最后在前端页面进行展示。

什么是BI?

BI,即商业智能,指利用大数据分析、现代数据仓库等技术收集企业最新数据、形成BI报表并及时为企业员工提供BI数据分析报告,实现对业务数据的深入挖掘以获取更多商业价值。大多数企业每天都会收集海量业务数据,这些数据来自其 ERP 软件、电商平台、供应链以及许多其他内部和外部数据源。要想充分利用这些数据,制定由数据驱动的决策,现代商业智能 (BI) 系统必不可少。

Golang微服务框架Kratos实现Thrift服务

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

什么是Thrift

Thrift是Facebook于2007年开发的跨语言的rpc服框架,提供多语言的编译功能,并提供多种服务器工作模式;用户通过Thrift的IDL(接口定义语言)来描述接口函数及数据类型,然后通过Thrift的编译环境生成各种语言类型的接口文件,用户可以根据自己的需要采用不同的语言开发客户端代码和服务器端代码。2007年由facebook贡献到apache基金,是apache下的顶级项目,具备如下特点:

  • 支持多语言:C、C++ 、C# 、D 、Delphi 、Erlang 、Go 、Haxe 、Haskell 、Java 、JavaScript、node.js 、OCaml 、Perl 、PHP 、Python 、Ruby 、SmallTalk
  • 消息定义文件支持注释,数据结构与传输表现的分离,支持多种消息格式
  • 包含完整的客户端/服务端堆栈,可快速实现RPC,支持同步和异步通信
golang微服务框架Kratos实现分布式任务队列

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

任务队列(Task Queue) 一般用于跨线程或跨计算机分配工作的一种机制。其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务。

任务队列的输入是称为任务(Task)的工作单元。专用的工作进程不断监视任务队列以查找要执行的新工作。

在Golang语言里面,我们有像Asynq和Machinery这样的类似于Celery的分布式任务队列。

Golang微服务框架Kratos轻松集成并使用Swagger UI

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

在我们的开发当中,调试接口,测试接口,提供接口文档给前端,那都是非常频繁的工作内容。

那么,我们需要用什么方法和工具来实施这些工作内容呢?

Swagger,或者说OpenAPI。

下面先让我们了解一下下什么是Swagger,什么是OpenAPI。

什么是 OpenAPI

OpenAPI 是编写 RESTful API 的全球标准。它是一种规范,使得全球开发人员可以标准化 API 的设计,并在从头开始编写 REST API 时遵守所有安全、版本控制、错误处理和其他最佳实践。不仅仅是从头开始,即使现有的 API 也可以进行微调以符合全球标准。

Golang微服务框架kratos实现SSE服务

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

我也是最近才知道SSE的,问了下周围的人,发现知道的人也着实不多的。我是怎么知道SSE的呢?我看了下OpenAI的API,有一个Stream模式,就是使用的SSE实现的。说白了,这就是一个HTTP长连接通过服务端持续发送数据到前端的协议。在网络不稳定的情况下,它比Websocket要更好。

什么是SSE

Server-Sent Events(简称 SSE)

严格地说,HTTP 协议无法做到服务器主动推送信息。但是,有一种变通方法,就是服务器向客户端声明,接下来要发送的是流信息(streaming)。

也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。这时,客户端不会关闭连接,会一直等着服务器发过来的新的数据流,视频播放就是这样的例子。本质上,这种通信就是以流信息的方式,完成一次用时很长的下载。

Golang微服务框架kratos实现Socket.IO服务

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

Socket.IO 是一个面向实时 web 应用的 实时通讯库。它使得服务器和客户端之间实时双向的通信成为可能。底层使用EngineIO。SocketIO的的客户端使用Engine.IO-Client,服务端使用Engine.IO实现。

Socket.IO 主要使用WebSocket协议。但是如果需要的话,Socket.IO 可以回退到几种其它方法,例如Adobe Flash Sockets,JSONP拉取,或是传统的AJAX拉取,并且在同时提供完全相同的接口。尽管它可以被用作WebSocket的包装库,它还是提供了许多其它功能,比如广播至多个套接字,存储与不同客户有关的数据,和异步IO操作。

Golang微服务框架kratos实现SignalR服务

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

基于 SignalR 可以实现客户端和服务器之间进行即时通信。

适合 SignalR 的应用场景:

需要从服务器进行高频率更新的应用。 示例包括游戏、社交网络、投票、拍卖、地图和 GPS 应用。 仪表板和监视应用。 协作应用。 协作应用的示例包括白板应用和团队会议软件。 需要通知的应用。 社交网络、电子邮件、聊天、游戏、旅行警报和很多其他应用都需使用通知。

SignalR 自动选择服务器和客户端能力范围内的最佳传输方法,如WebSockets、Server-Sent Events、长轮询。Hub 是一种高级管道,允许客户端和服务器相互调用方法。 SignalR 自动处理跨计算机边界的调度,并允许客户端调用服务器上的方法,反之亦然。SignalR 提供两个内置协议:基于 JSON 的文本协议和基于 MessagePack 的二进制协议。

将Kratos微服务程序运行为Linux守护进程

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

supervisor

安装supervisor

Centos:

# 先安装 EPEL
yum install -y epel-release

# 安装supervisor
sudo yum -y install supervisor

# 设置为开机启动
sudo systemctl enable supervisord

# 启动进程
sudo systemctl start supervisord
Golang微服务框架Kratos应用RocketMQ消息队列

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

消息队列是一种异步的服务间通信方式,适用于无服务器和微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。

消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件,所以掌握好消息队列MQ就变得极其重要。

在本文当中,您将了解到:什么是消息队列?什么是RocketMQ?怎样在微服务框架Kratos当中应用RocketMQ进行业务开发。

什么是消息队列

消息队列(Message Queue,简称MQ)指保存消息的一个容器,其实本质就是一个保存数据的队列。

Golang微服务框架Kratos应用RabbitMQ消息队列

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

消息队列是一种异步的服务间通信方式,适用于无服务器和微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。

消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件,所以掌握好消息队列MQ就变得极其重要。

在本文当中,您将了解到:什么是消息队列?什么是RabbitMQ?怎样在微服务框架Kratos当中应用RabbitMQ进行业务开发。

什么是消息队列

消息队列(Message Queue,简称MQ)指保存消息的一个容器,其实本质就是一个保存数据的队列。

Golang微服务框架Kratos应用Pulsar消息队列

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

消息队列是一种异步的服务间通信方式,适用于无服务器和微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。

消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件,所以掌握好消息队列MQ就变得极其重要。

在本文当中,您将了解到:什么是消息队列?什么是Pulsar?怎样在微服务框架Kratos当中应用Pulsar进行业务开发。

什么是消息队列

消息队列(Message Queue,简称MQ)指保存消息的一个容器,其实本质就是一个保存数据的队列。

Kratos微服务框架实现权鉴 - OPA

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

Open Policy Agent,官方简称OPA,旨在统一不同技术和系统的策略执行。今天,OPA 被科技行业内的巨头们所使用。例如,Netflix 使用 OPA 来控制对其内部 API 资源的访问。Chef 用它来为他们的终端用户产品提供 IAM 功能。此外,许多其他公司,如 Cloudflare、Pinterest 等,都使用 OPA 在他们的平台上执行策略(如 Kubernetes 集群)。

OPA 最初是由 Styra 公司在 2016 年创建并开源的项目,目前该公司的主要产品就是提供可视化策略控制及策略执行的可视化 Dashboard 服务的。

Golang微服务框架Kratos应用NSQ消息队列

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

消息队列是一种异步的服务间通信方式,适用于无服务器和微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。

消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件,所以掌握好消息队列MQ就变得极其重要。

在本文当中,您将了解到:什么是消息队列?什么是NSQ?怎样在微服务框架Kratos当中应用NSQ进行业务开发。

什么是消息队列

消息队列(Message Queue,简称MQ)指保存消息的一个容器,其实本质就是一个保存数据的队列。 消息中间件是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的构建。

Golang微服务框架Kratos应用NATS消息队列

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

消息队列是一种异步的服务间通信方式,适用于无服务器和微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。

消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件,所以掌握好消息队列MQ就变得极其重要。

在本文当中,您将了解到:什么是消息队列?什么是NATS

什么是消息队列

消息队列(Message Queue,简称MQ)指保存消息的一个容器,其实本质就是一个保存数据的队列。

消息中间件是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的构建。

Kratos微服务框架下的TLS单向和双向认证

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

什么是SSL

SSL(安全套接字层) 及其后继者 TLS(传输层安全性) 是用于在联网计算机之间建立经过身份验证和加密的链接的协议。 尽管SSL协议已随着以下版本的发布而被弃用 TLS 1.0,在1999年,将这些相关技术称为“ SSL”或“ SSL /TLS。” 最新版本是 TLS 1.3,定义于 RFC 8446 (八月2018)。

Golang微服务框架Kratos应用MQTT消息队列

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

消息队列是一种异步的服务间通信方式,适用于无服务器和微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。

消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件,所以掌握好消息队列MQ就变得极其重要。

在本文当中,您将了解到:什么是消息队列?什么是MQTT?怎样在微服务框架Kratos当中应用MQTT进行业务开发。

什么是消息队列

消息队列(Message Queue,简称MQ)指保存消息的一个容器,其实本质就是一个保存数据的队列。

golang微服务框架Kratos实现消息队列

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

什么是消息队列

MQ就是消息队列,是Message Queue的缩写。消息队列是一种通信方式。消息的本质就是一种数据结构。因为MQ把项目中的消息集中式的处理和存储,所以MQ主要有解耦,并发,和削峰的功能。

为什么要使用消息队列

1. 异步

通常的微服务实现里面,都是通过RPC进行微服务之间的相互调用,这是同步的。如果消息队列的话,可以实现异步的调用。至于异步有啥好处呢,主要是为了削峰。

2. 削峰

同步的调用会带来一个问题:瞬时流量。客户的调用同步接口节奏,你是无法把控的,流量将会是忽高忽低的,猛的来一波,搞不好系统就崩了溃了。

Golang微服务框架居然可以开发单体应用?—— Kratos单体架构实践

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

TL;DR

微服务框架也是可以用于开发单体架构(monolith architecture)的应用。并且,单体应用也是最小的、最原始的、最初的项目状态,经过渐进式的开发演进,单体应用能够逐步的演变成微服务架构,并且不断的细分服务粒度。微服务框架开发的单体架构应用,既然是一个最小化的实施,那么它只需要使用到微服务框架最小的技术,也就意味着它只需要用到微服务框架最少的知识点,拿它来学习微服务框架是极佳的。

本文将围绕着一个我写的demo项目:kratos-monolithic-demo开展,它既是一个微服务框架Kratos的最小化实践,也是一个工程化实践的完全体。从中你可以学习到:

基于 Go-Kratos 与 MCP 的推荐服务实战指南

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

在微服务与多模块协同场景下,实现服务间的标准化通信与流程调度是核心挑战。本文聚焦 go-kratos-mcp-demo 项目,讲解如何基于 Go-Kratos 框架与 MCP(模块化协同协议)构建可扩展的推荐服务,涵盖服务契约设计(proto)、模块化流程编排、召回/过滤/排序等关键模块的实现与测试,并展示实战部署与可观测性方案。

技术基石:Go-Kratos 与 MCP 的协同架构

项目技术选型围绕 “模块化协同” 核心需求展开,Go-Kratos 与 MCP 构成架构的两大支柱,形成 “框架赋能 + 协议规范” 的协同模式:

Golang微服务框架Kratos应用分布式任务队列Machinery

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

任务队列(Task Queue) 一般用于跨线程或跨计算机分配工作的一种机制。其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务。

任务队列的输入是称为任务(Task)的工作单元。专用的工作进程不断监视任务队列以查找要执行的新工作。

在Golang语言里面,我们有像Asynq和Machinery这样的类似于Celery的分布式任务队列。

Golang微服务框架Kratos应用Kafka消息队列

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

消息队列是一种异步的服务间通信方式,适用于无服务器和微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。

消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件,所以掌握好消息队列MQ就变得极其重要。

在本文当中,您将了解到:什么是消息队列?什么是Kafka?怎样在微服务框架Kratos当中应用Kafka进行业务开发。

什么是消息队列

消息队列(Message Queue,简称MQ)指保存消息的一个容器,其实本质就是一个保存数据的队列。

Kratos微服务框架物联网IoT实战:设备实时地图

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

IoT,也就是物联网,万物互联,在未来肯定是一个热点——实际上,现在物联网已经很热了。

那好,既然这一块这么有前途。那我们就来学习怎么开发物联网系统吧。可是,作为一个小白,两眼一抹黑:我想学,可是我该如何开始?这玩意儿到底该咋整呢?

于是,我各种找资料,各种学习——此处省略一亿个字,其中的艰辛,其中的曲折,总之就是:说来都是泪,欲哭却无声——总算是有了基础的认知,有了一个模糊的方向。我知道了物联网设备通讯协议MQTT、CoAP、LwM2M,知道了微服务,知道了MQ,知道了Websocket,知道了REST,知道了gRPC……有了这些认知,看起来可以开始做技术选型了。

Kratos 大乱炖 —— 整合其他Web框架:Gin、FastHttp、Hertz

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

Kratos默认的RPC框架使用的是gRPC,支持REST和protobuf两种通讯协议。其API都是使用protobuf定义的,REST协议是通过grpc-gateway转译实现的。使用protobuf定义API是具有极大优点的,具有很强的可读性、可维护性,以及工程性。工程再大,人员再多,也不会乱。

一切看起来都是很美好的。那么,问题来了,我们现在使用的是其他的Web框架,迁移就会有成本,有风险,不可能一下子就把历史存在的代码一口气转换过来到Kratos框架。那我可以在Kratos中整合其他的Web框架做过渡吗?答案是:可以的。Kratos是基于的插件化设计,万物皆可插。

golang微服务框架Kratos实现GraphQL服务

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

GraphQL 是一种用于应用编程接口(API)的查询语言和服务器端运行时,它可以使客户端准确地获得所需的数据,没有任何冗余。

GraphQL 由 Facebook 开发,并于 2012 年首次应用于移动应用。GraphQL 规范于 2015 年实现开源。现在,它受 GraphQL 基金会监管。

GraphQL有什么用?

GraphQL 旨在让 API 变得快速、灵活并且为开发人员提供便利。它甚至可以部署在名为 GraphiQL 的集成开发环境(IDE)中。作为 REST 的替代方案,GraphQL 允许开发人员构建相应的请求,从而通过单个 API 调用从多个数据源中提取数据。

Kratos微服务与它的小伙伴系列 - 依赖注入库 - Wire

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

什么是依赖注入?

依赖注入 (Dependency Injection,缩写为 DI),是一种软件设计模式,也是实现控制反转(Inversion of Control)的其中一种技术。这种模式能让一个物件接收它所依赖的其他物件。“依赖”是指接收方所需的对象。“注入”是指将“依赖”传递给接收方的过程。在“注入”之后,接收方才会调用该“依赖”。此模式确保了任何想要使用给定服务的物件不需要知道如何建立这些服务。取而代之的是,连接收方物件(像是 client)也不知道它存在的外部代码(注入器)提供接收方所需的服务。

依赖注入涉及四个概念:

  1. 服务:任何类,提供了有用功能。
  2. 客户:使用服务的类。
  3. 接口:客户不应该知道服务实现的细节,只需要知道服务的名称和 API。
  4. 注入器:Injector,也称 assembler、container、provider 或 factory。负责把服务引入给客户。 依赖注入把对象构建与对象注入分开。因此创建对象的 new 关键字也可消失了。
Golang微服框架Kratos与它的小伙伴系列 - ORM框架 - GORM

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

什么是ORM?

面向对象编程和关系型数据库,都是目前最流行的技术,但是它们的模型是不一样的。

面向对象编程把所有实体看成对象(object),关系型数据库则是采用实体之间的关系(relation)连接数据。很早就有人提出,关系也可以用对象表达,这样的话,就能使用面向对象编程,来操作关系型数据库。

简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。

ORM 把数据库映射成对象。

  • 数据库的表(table) --> 类(class)
  • 记录(record,行数据)--> 对象(object)
  • 字段(field)--> 对象的属性(attribute)
Golang微服框架Kratos与它的小伙伴系列 - ORM框架 - Ent

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

什么是ORM?

面向对象编程和关系型数据库,都是目前最流行的技术,但是它们的模型是不一样的。

面向对象编程把所有实体看成对象(object),关系型数据库则是采用实体之间的关系(relation)连接数据。很早就有人提出,关系也可以用对象表达,这样的话,就能使用面向对象编程,来操作关系型数据库。

简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。

ORM 把数据库映射成对象。

  • 数据库的表(table) --> 类(class)
  • 记录(record,行数据)--> 对象(object)
  • 字段(field)--> 对象的属性(attribute)
Golang微服框架Kratos与它的小伙伴系列 - 分布式事务框架 - DTM

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

在 GO 语言生态中,DTM(Distributed Transaction Manager) 是一个开源的分布式事务管理服务,专门用于解决微服务架构下分布式事务的一致性问题。它以轻量、易用、高性能为特点,支持多种分布式事务模式,是 GO 语言开发者在处理跨服务数据一致性时的常用工具。

DTM 的核心功能与特点

1. 支持多种事务模式

DTM 针对不同业务场景,实现了主流的分布式事务协议,包括:

  • TCC(Try-Confirm-Cancel):适用于核心业务场景,通过拆分业务为 “尝试”、“确认”、“取消” 三个阶段,保证最终一致性。
  • SAGA:适用于长事务场景,将分布式事务拆分为多个本地事务步骤,每个步骤对应一个补偿操作,若某步失败则执行反向补偿。
  • 本地消息表(Local Message Table):基于消息的异步确认机制,通过本地事务与消息发送的原子性,确保跨服务操作的最终一致。
  • 事务消息:结合消息队列实现,通过 “半消息”、“确认发送”、“消费确认” 等机制,保证消息可靠投递与业务操作的一致性。
  • XA:基于数据库的 XA 协议(如 MySQL 的 XA 事务),适用于对强一致性要求高且支持 XA 协议的数据库场景。
Kratos 下使用 Protobuf FieldMask 完全指南

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

当我们使用 gRPC 进行跨服务通讯时,调用方往往只需要响应中的部分字段 —— 冗余字段不仅会增加网络传输成本,更可能触发不必要的下游依赖调用(比如为了返回一个非核心字段,需要额外调用 2 个服务)。​

在微服务场景中,这种「无效计算 + 无效传输」的开销会被放大:一次 RPC 级联 3~5 个下游是常态,而响应体中 60% 以上的字段可能都是调用方不需要的。​

此时,我们需要一种「字段按需筛选」机制:

  • GraphQL 用「字段选择器」实现​
  • JSON:API 用「稀疏字段集」实现​
  • 而 gRPC 生态中,Protobuf FieldMask 是标准且高效的解决方案。
Kratos微服务框架常见问题解答

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

为什么Protobuf定义成int64,转成json之后却变成了string类型?

比如说,定义了一个proto文件

message PartyMusicSearchItem {
    string name = 1;
    int32  fileSize = 2;
    string author = 3;
    string musicId = 4;
    int32 type = 6;
    int64 createdAt = 7;
    int64 lastTime = 8;
}
Kratos微服务轻松对接EFK日志系统

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

在早期的单体服务时代,如果想要在生产环境中通过日志去定位业务逻辑的Bug或者性能问题,那么我们需要让运维人员逐个远程登入服务器,逐个服务实例去查询日志文件,这样排查问题的效率是相当的低,当线上发生了紧急状况的时候,人都要急死,却又无法有效率的排查出问题所在,更不用说解决问题。

而在微服务时代,服务实例部署在不同的物理机上,各个微服务的日志也被分散储存在不同的物理机上。当服务集群足够大,成百上千,甚至上万,此时再使用上述的传统方式查阅日志,那已经是不可完成的任务。因此,我们需要集中化管理分布式系统中的日志,其中有开源的组件如Syslog,用于将所有服务器上的所有服务的日志进行收集、汇总。

Kratos微服务框架下实现CQRS架构模式

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

命令查询的责任分离Command Query Responsibility Segregation 通常被简化为 命令查询分离,即读写分离。

在特定的场景下,它可以提供更好的性能。但是,在强一致性方面,它并不能够保证。而且,还会带来认知负担。所以,实际运用上,需要谨慎。

什么是 CQRS

这个概念出自于 命令与查询分离(CQS, Command Query Separation),出自于1987 年 Bertrand Meyer 的 《面向对象软件构造》(Object-Oriented Software Construction)一书,其原始概念是我们可以把对象操作分为:命令(Command)和 查询(Query)两种形式。

跟我一起用Golang微服务框架实现一个CMS系统

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

微服务,是一种分布式软件架构。采用了分而治之的方法去解决复杂的应用问题。我们可以把复杂的系统拆解成不同的服务,并使之可以方便的进行横向扩容,提升整个系统的负载。

任何一个系统,它都需要一个管理系统,即便是使用微服务的架构也是需要的。在本文里,我们将使用B站开源的Golang语言微服务框架Kratos去实现一个最简单的CMS:博客系统。

Kratos 微服务轻松对接 CFG 日志系统

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos
  • ClickHouse
  • Fluent Bit
  • Grafana
Kratos微服务框架实现权鉴 - Casbin

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

Casbin(https://github.com/casbin/casbin)是一套访问控制开源库,致力于帮助复杂系统解决权限管理的难题。同时也是一个国产开源项目。Casbin采用了元模型的设计思想,既支持ACL(访问控制列表),RBAC(基于角色访问控制),ABAC(基于属性访问控制)等经典的访问控制模型,也支持用户按照自身需求灵活定义权限。Casbin已经被Intel、IBM、腾讯云、VMware、RedHat、T-Mobile等公司开源使用,被Cisco、Verizon等公司闭源使用。具体详见Casbin主页(https://casbin.org/)。

使用Bazel构建你的Kratos微服务

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

Kratos是一个微服务框架,既然是微服务,那么一个工程下肯定会存在不少的服务,一个服务就是一个二进制可执行程序,那么我们将会面对一个问题:如何去构建(Build)这些服务程序。这件事情,通常都交由构建系统去做。我们能够选择的构建系统有很多:Make、CMake、Bazel……那么,我们又该如何选择一个构建系统呢?

项目结构简单,服务少,我们完全可以使用Make来进行构建。要学会使用Make,您需要学会使用Makefile来编写构建脚本,如果整个构建只是组织一些简单的编译命令,那还好,学习和使用都会是简单轻松的事情。

但是,理想很丰满,现实很骨感。在实际的工程实践中,一切都会朝着复杂的方向发展。服务的数量肯定不会少,工程的组织结构也肯定不会简单,那么,构建也就会变得相应的复杂起来,需要编写大量的Makefile,Makefile的复杂度也越来越大了。另外还有,构建环境的搭建问题,持续集成的问题,自动构建的问题,构建时间变长的问题……抱歉,面对这样复杂的工程环境,Make难以满足我们的需求。

Kratos微服务框架下的认证和鉴权

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

从单体应用迁移到微服务架构,虽能收获松耦合、可扩展等诸多优势,但也引入了新的安全挑战。微服务通过开放 API 实现服务间通信,与单体应用相比:​

  • 攻击面显著扩大:每个独立服务都需单独保障安全性,风险点呈指数级增加​
  • 通信安全性要求更高:API 调用不仅要验证身份,还需保障传输安全与可用性​

因此,微服务架构需要一套与单体应用截然不同的安全解决方案,核心聚焦于认证(Authentication) 与鉴权(Authorization) 两大核心能力。

一、认证与鉴权的核心区别​

认证和授权的区别

Golang微服务框架Kratos应用分布式计划任务队列Asynq

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

任务队列(Task Queue) 一般用于跨线程或跨计算机分配工作的一种机制。其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务。

任务队列的输入是称为任务(Task)的工作单元。专用的工作进程不断监视任务队列以查找要执行的新工作。

在Golang语言里面,我们有像Asynq和Machinery这样的类似于Celery的分布式任务队列。

Kratos微服务框架API工程化指南

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

Kratos的RPC默认使用的是gRPC,与此同时我们还可以通过gRPC的grpc-gateway功能对RESTfull进行支持。这样,我们就可以同时支持gRPC和REST了。而这一切Kratos都已经封装好,无需知道底层的一切,用就好了。

怎样在Go语言中生成随机种子

Date: 1/1/2020Category: Go编程Tag: Golang, 随机种子

time.Now().UnixNano

这是用的最多的,但是,也是安全隐患最大的方法。

从表面上看go的时间方法最大精度到纳秒,但是好像其实并不能到达的绝对的纳秒精度。

测试结果很不好,碰撞很高。

import "time"

func TestSeedNanoTime(t *testing.T) {
	var seeds = make(map[int64]bool)
	for i := 0; i < 100000; i++ {
		seed := time.Now().UnixNano()
		seeds[seed] = true
		fmt.Println(seed)
	}
	fmt.Println(len(seeds))
}
使用Bazel构建Golang程序

Date: 1/1/2020Category: Go编程Tag: Golang, Bazel

在这篇简短的文章中,我们将介绍如何将 Golang 与 Bazel 构建系统结合使用。

具体来说,我们将讨论三个场景:

  1. 从头开始一个 Golang 项目;
  2. 将一个现有的 Golang 项目转换为 Bazel 构建;
  3. 以及将一个第三方 Golang 项目引入到您的 Bazel 构建系统。

从头开始一个 Golang 项目

让我们从将 Go 与 Bazel 结合使用的基础知识开始。

为此,我们需要从 https://github.com/bazelbuild/rules_go 获取 Go 语言的官方构建规则。

Golang在func中分配的变量通过参数传递出函数域之后变nil的问题

Date: 1/1/2020Category: Go编程Tag: Golang

最近在Go上面碰到了一个传出参数的问题:

func testOutString(out *string) {
	if out == nil {
		// str := "hellow"
		// out = &str
		out = new(string)
	}
	*out = "hello"
}

func main() {
	var str *string
	testOutString(str)
	fmt.Println(str)
}
如何使用 Golang 查询 MongoDB

Date: 1/1/2020Category: Go编程Tag: Golang, MongoDB

如何使用 Golang 连接 MongoDB

连接 MongoDB 非常简单,只需连接 MongoDB 生成的 uri。

然后我们可以使用 client.Database() 函数来确保我们连接到正确的数据库。

package main

import (
	"context"
	"log"
	"time"

	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
)

func main() {
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

	client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
	if err != nil {
		log.Fatal(err)
	}

	db := client.Database("testdb")

	// disconnect the mongo client when main is completed
	defer func() {
		if err = client.Disconnect(ctx); err != nil {
			panic(err)
		}
	}()
}
Golang模块版本管理

Date: 1/1/2020Category: Go编程Tag: Golang

GO模块版本号

模块的开发人员使用模块版本号的每个部分来表示版本的稳定性和向后兼容性。对于每个新版本,模块的发布版本号具体反映了自上一版本以来模块更改的性质。

当您开发使用外部模块的代码时,您可以在考虑升级时使用版本号来了解外部模块的稳定性。当您开发自己的模块时,您的版本号将向其他开发人员表明您的模块的稳定性和向后兼容性。

发布的模块在语义版本控制模型中使用版本号发布,如下图所示:

version-number

Golang 人脸识别

Date: 1/1/2020Category: Go编程Tag: Golang, 人脸识别

参考资料

  • 手把手 Golang 实现静态图像与视频流人脸识别
  • Golang人脸识别
Golang 并发模式:扇入、扇出

Date: 1/1/2020Category: Go编程Tag: Golang, 设计模式

个人喜爱 Golang 的最突出原因之一是:我们可以轻松构建高可用且非阻塞的程序。

在本系列文章中,我将尝试回忆 Golang 中可用的模式。我将采用每种模式,并详细讨论它们适合的位置以及如何有效地使用它们。

什么是扇入扇出。这是一种将数据从多个流或从一个流汇聚到多个流或管道的单一数据流的方法。

generate函数

为了讨论这个模式,我们首先需要一个数据源。这是一个可以用作数据源的数据生成器。

func generate( data string) <-chan string{
    channel := make(chan string)
    
    go func() {
        for {
            channel <- data
            time.Sleep(time.Duration(100*time.Millisecond))
    
        }
    }()
    return channel
}
GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:数据权限体系设计与实现

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在企业级中后台应用的建设中,数据权限是保障信息安全、符合业务合规要求的核心能力,更是平衡系统安全性与业务灵活性的关键支点。它不仅要精准解决 “谁能看到什么数据” 的核心问题,更需兼顾系统的可维护性、可扩展性与用户体验。GoWind Admin(风行)作为开箱即用的企业级全栈中后台框架,内置多层次、细粒度、高可扩展的一体化数据权限体系,从租户全局隔离到动态策略维度全面覆盖,原生支持单租户 / 多租户 SaaS 部署,让企业级应用的权限管理从 “重复开发” 变为 “开箱即用”。

一、数据权限的五大核心粒度层级

Go 语言 CMS 横评:风行 GoWind 对比传统 PHP/Java CMS 核心优势

Date: 4/9/2026Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

一、前言

在内容管理系统(CMS)领域,PHP(如 WordPress、织梦、帝国 CMS)与 Java(如 Jeecms、SiteServer)长期占据主流市场,前者以低成本、易上手著称,后者以企业级稳定性立足。但随着 Go 语言在高并发、云原生、微服务场景的爆发式普及,基于 Go 开发的轻量高性能 CMS 开始成为中小站点、企业官网、资讯平台、跨境独立站的新选择,其中风行 GoWind 作为国产优质 Go 原生 CMS 代表,凭借 Go 语言底层优势和轻量化设计,在性能、部署、运维、成本等维度对传统 PHP/Java CMS 形成了差异化竞争力。

GoWind Content Hub|风行,开箱即用的企业级前后端一体内容中台

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

风行(GoWind HCH)是一款基于 Golang 全栈构建的企业级 Headless 内容中台(HCH=Headless Content Hub,无头内容中枢),以开箱即用的产品形态、灵活可扩展的架构设计,为企业打造全域内容管理与分发的一体化解决方案,助力企业打破内容孤岛,实现全场景内容高效运营。

为什么选择风行内容中台?

在数字化时代,企业内容资产的价值愈发凸显,但传统内容管理模式普遍面临「架构僵化、多端适配难、权限管控粗、运营效率低」等痛点。风行内容中台从企业实际业务场景出发,构建了「轻量化部署、全能力覆盖、高灵活拓展」的产品体系:

  • 全栈技术底座:基于 Golang 高性能后端框架打造,兼顾稳定性与并发能力,多前端技术栈适配满足不同团队技术选型需求;
  • Headless 核心架构:内容生产与展示层解耦,通过标准化 API 实现内容跨端、跨平台无缝分发,适配 Web、小程序、APP 等全终端场景;
  • 企业级权限体系:从租户、部门、角色到按钮级权限的全维度管控,满足大型组织复杂的权限划分与数据隔离需求;
  • 可视化高效运营:无需代码开发,通过可视化配置完成内容建模、菜单管理、站点配置等核心操作,大幅降低运营成本,提升内容上线效率。
Headless 架构优势:内容与展示解耦,一套 API 打通全端生态

Date: 4/9/2026Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在前端技术飞速迭代的当下,用户触点早已从单一的 Web 端,延伸至小程序、APP、平板、智能设备等多元场景。传统的 “前后端一体” 架构(如 PHP/Java 渲染模板)在面对多端适配时,暴露出耦合严重、开发效率低、体验不统一等核心痛点。

而 Headless(无头)架构 作为一种以 API 为核心、内容与展示完全解耦的架构模式,正成为企业级应用、内容平台与数字化系统的主流解决方案。结合 风行 GoWind 等基于 Go 语言的 Headless CMS / 后端架构,其能实现一套 API 同时支撑 Web、小程序、APP、React/Vue、Taro 等全端开发,在效率、灵活性、扩展性上形成降维打击。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架・内置微服务接口数据聚合能力

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

让复杂归于简单,让聚合成为本能。

在微服务架构盛行的今天,企业中后台系统正面临前所未有的开发与性能双重挑战:前端需从数十个独立服务中零散拉取数据,网络请求冗余、状态管理繁琐;后端逻辑分散、接口复用性差、N+1 查询问题泛滥,既拖累开发效率,也让系统性能持续承压。如何在坚守系统解耦原则的同时,高效组装业务视图、简化开发链路?GoWind Admin(风行) 应运而生——一款专为现代企业打造的全栈中后台框架,以“开箱即用 + 内置智能聚合”为核心理念,彻底破解微服务时代的数据拼装难题,让开发者从接口拼接的繁琐工作中解放出来。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:自动化解放双手,初学者快速搭建系统并自动生成前端接口

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

作为后端开发者,你是否曾为前后端接口联调反复沟通?作为前端新手,是否觉得手动封装 Rest 接口繁琐又易出错?今天就为大家推荐一套高效组合拳——GoWind Admin(开箱即用的全栈中后台框架)+ protoc-gen-typescript-http(Protobuf 驱动的 TS 接口生成器),让你从零到一快速搭建企业级管理系统,还能自动生成类型安全的前端接口,生产力直接翻倍!

一、先搞懂:这两个工具到底是什么?

动手实操前,我们先理清核心工具的定位,避免盲目上手:

1. GoWind Admin:企业级中后台的「脚手架王者」

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:深度解析 Wire 依赖注入集成实践

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在企业级中后台框架开发中,依赖管理是贯穿全生命周期的核心挑战 —— 随着项目规模扩张,手动创建对象、传递依赖会导致代码耦合度陡增、测试成本居高不下、维护难度指数级上升。依赖注入(DI)通过 “控制反转” 机制,将对象的创建与依赖传递解耦,成为解决这一问题的最优解之一。本文以 GoWind Admin(风行)框架为实践载体,深度解析 Google 开源的编译期依赖注入工具 Wire,并完整呈现其在企业级中后台框架中的标准化集成方案。

一、基础认知:什么是依赖注入(DI)?

依赖注入(Dependency Injection,DI)是实现控制反转(IoC)的核心技术,其核心思想可概括为:对象的依赖由外部容器提供,而非对象自身创建。这里的 “依赖” 指对象运行所需的其他组件(如数据库连接、配置实例、业务服务等),“注入” 则是外部容器将依赖主动传递给目标对象的过程。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:用户表从简单到租户的演进

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

先解决有没有,再解决好不好

极简User

CREATE TABLE users (
    id BIGINT PRIMARY KEY,
    authority VARCHAR(50),
    password VARCHAR(255)
);
GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:如何上传文件

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在一个CMS和Admin系统里面,文件上传是一个极其重要的功能之一。

在Kraots-Admin里面,我们把所有的文件都落地到MinIO。MinIO是一个非常优秀的分布式文件管理系统。

通常,后端可用的有两种上传方式:

  1. 通过Kratos的服务向MinIO申请预签名URL,然后通过预签名URL向MinIO上传文件。
  2. 直接向Kratos的服务上传文件,然后,微服务再将文件落地到MinIO。

方式一,这是最优的解决方案,因为文件不会经过微服务,直接上传到MinIO,减轻了微服务的压力。并且,MinIO支持分布式部署,可以很好的扩展。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:定时任务

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在后台管理系统中,定时任务是一个很实用的功能,可以帮助我们自动执行一些周期性的任务,比如定期清理数据、发送邮件提醒等。

在go里面,如果想要简单的实现一个周期性任务,我们可以用cron或者gron等仿linux的crontab的库。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:集成 Swagger UI 打造交互式 API 文档

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在企业级中后台系统开发中,接口调试、测试与文档同步始终是困扰前后端团队的核心痛点:接口变更后文档未及时更新、手动编写文档效率低下、调试工具切换繁琐等问题,严重影响开发协作效率。而 OpenAPI 规范(原 Swagger 规范)及其配套工具 Swagger UI,正是解决这些问题的最优解之一。

笔者在使用 Python 生态的 FastAPI 框架时,发现其内置的 Swagger UI 体验极佳——开发者可直接通过 http://127.0.0.1:8000/docs 访问交互式 API 文档,实现接口可视化调试与测试,无需额外部署工具。受此启发,我们将这一方案借鉴到 GoWind Admin(基于 Kratos 框架的企业级前后端一体中后台框架)中,实现了 API 文档的自动化生成与嵌入式访问。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:用 JavaScript/Lua 解锁动态业务扩展能力

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在企业级中后台系统开发领域,「业务规则频繁迭代」与「个性化需求快速响应」始终是困扰开发团队的核心痛点。试想这样的场景:电商平台的促销规则需随节日实时调整, SaaS 系统需为不同行业客户定制专属审批流程,风控系统需根据最新风险模型动态更新校验逻辑…… 传统「代码开发 - 编译打包 - 部署上线」的全流程,往往需要数小时甚至数天才能完成迭代,严重滞后于业务节奏。

脚本引擎的嵌入式集成,为这一困境提供了优雅的破局思路——通过动态执行脚本代码,实现业务逻辑的「热更新、热部署」,无需重启服务即可完成规则迭代与需求适配。GoWind Admin(风行)作为一款主打「开箱即用」的企业级前后端一体中后台框架,精准洞察这一需求,深度整合 kratos-bootstrap 生态中的 script_engine 组件(https://github.com/tx7do/kratos-bootstrap/tree/main/script_engine),实现了对 JavaScript、Lua 两种主流脚本语言的无缝支持,让开发者能够以极低成本嵌入动态逻辑,为中后台系统注入「随需而变」的灵活基因。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:数据脱敏和隐私保护

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

Go Wind Admin 的数据脱敏能力,是基于 Protobuf 生态下的arrakis-digital/protoc-gen-redact插件实现的 —— 通过在 Protobuf 消息定义中为敏感字段(如手机号、身份证号)添加脱敏注解(如((redact.custom).string = "r*d@ct*d")),由插件自动生成适配业务的脱敏方法(如 Go 语言的Redact()方法),无需侵入业务逻辑即可完成敏感数据的遮挡处理,同时保持与 Protobuf 消息结构的强绑定,避免跨层配置不一致问题。配微服务接口、日志打印、数据存储等场景的隐私保护需求。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:5 分钟快速启动

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

go-wind-admin 作为开箱即用的企业级 Admin 全栈解决方案,核心优势之一是通过 backend/script 目录的 自动化脚本 降低跨系统部署门槛。本文以 “脚本驱动 + 实操验证” 为核心,优化步骤连贯性与细节提示,补充用户高频踩坑点,帮你更顺畅地完成从环境到服务的全流程搭建。

前置检查清单(启动前必看)

避免因基础条件缺失导致流程中断,启动前确认以下事项:

  1. 操作系统权限:Windows 需 管理员身份 打开 PowerShell;Linux/macOS 需拥有 sudo 权限(执行脚本时可能需要)。
  2. 网络状态:确保能访问 GitHub、Docker Hub、Homebrew/Scoop 源(建议提前配置国内镜像,见各系统备注)。
  3. 磁盘空间:预留至少 10GB 空间(用于存储 Docker 镜像、依赖包、编译产物)。
GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:OPA 集成指南:从原理到实践

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

Open Policy Agent(简称 OPA)是一款开源的通用策略引擎,核心价值在于实现“策略即代码”(Policy as Code),将分散在各系统中的权限控制、资源访问规则等策略逻辑抽离出来,进行统一管理、版本控制与执行。如今,OPA 已成为云原生生态中策略管控的事实标准,被 Netflix、Cloudflare、Pinterest、Chef 等巨头广泛应用——从内部 API 权限管控、Kubernetes 集群资源调度,到终端产品的 IAM 功能实现,均能看到其身影。

OPA 由 Styra 公司于 2016 年开源,2018 年加入 CNCF(云原生计算基金会)成为沙箱项目,2021 年 2 月正式毕业,其快速晋升的背后,是社区的高度活跃与行业对统一策略管控需求的迫切性。本文将从 OPA 核心原理、Rego 语言入门,逐步深入到 GoWind Admin 企业级中后台框架的完整集成流程,帮助开发者快速落地权限管控能力。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:MongoDB集成指南(从部署到实战全攻略)

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

MongoDB 是一款开源的文档型 NoSQL 数据库,以灵活的 Schema 设计、原生 JSON/BSON 支持、高可扩展性和高性能查询著称,非常适合处理中后台系统中的非结构化 / 半结构化数据(如用户行为日志、动态表单配置、多维度报表、个性化配置等)。

GoWind Admin(风行)是面向企业级场景的前后端一体中后台框架,本文将从「环境部署→配置集成→模型设计→仓储实现→最佳实践」全流程讲解如何在 GoWind Admin 中优雅集成 MongoDB,覆盖开发、部署、调优全环节。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:Makefile 在后端开发中的应用与 Windows 环境配置

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在企业级中后台框架的开发过程中,高效的工程化管理是提升团队协作效率、保障开发流程规范的核心。GoWind Admin(风行)作为一款基于 Go 微服务框架 go-kratos 和 Vue 前端框架 Vben Admin 的全栈解决方案,其后端工程化体系中,Makefile 扮演了至关重要的角色 —— 它通过统一的命令集简化了复杂的构建流程,实现了环境初始化、依赖管理、代码生成、服务部署等操作的自动化,让开发者能够聚焦业务逻辑而非繁琐的工具链配置。本文将系统介绍 Windows 环境下 make 工具的安装方法、Makefile 的分层设计逻辑,以及核心命令的实战应用。

一、Makefile 在 GoWind Admin 后端开发中的核心价值

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:列表查询规则指南

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在企业级中后台系统中,列表查询是贯穿“数据管理、业务审核、统计分析”的核心高频场景——从用户列表的多条件筛选,到订单数据的时间区间查询,再到报表的排序分页,其易用性与灵活性直接决定研发效率与业务操作体验。风行·GoWind Admin 作为开箱即用的 Go 语言后台管理系统,以“降低开发成本、提升研发效率”为核心设计理念,针对性打造了一套“配置化、高兼容、可扩展”的列表查询规则,让开发者无需关注底层 SQL 实现,仅通过简单配置即可完成复杂查询需求。

一、核心设计理念:声明式语法与 Go 生态适配

GoWind Admin 列表查询规则的设计,深度借鉴了 Python 生态中 Django ORM、SQLAlchemy 等优秀框架的“声明式语法”核心思想——通过贴近自然语言的配置方式屏蔽底层数据访问细节,让开发者聚焦业务逻辑而非 SQL 拼接。但不同于简单照搬,我们基于 Go 语言“强类型、高性能”的特性做了全链路适配,最终实现“简洁直观”与“原生兼容”的平衡:

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:分层设计的取舍之道(从 “简单粗暴” 到依赖倒置)

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在后端开发领域,分层设计是破解系统复杂度、提升可维护性的“核心心法”。对于 GoWind Admin 这类企业级中后台框架而言,API 层、Service 层(业务逻辑层)与 Data 层(数据访问层)的交互模式,直接决定了框架的灵活性、开发效率与长期演进能力。其中,Service 层与 Data 层的耦合程度,更是架构设计的“关键胜负手”。​

本文将聚焦 GoWind Admin 的实际开发场景,深入剖析“Service 层直接引用 Data 层 Repo”(简单粗暴方案)、“基于依赖倒置的接口解耦”(工程化方案)以及“新增 biz 层的进阶方案”三种核心模式,拆解分层设计的取舍逻辑——架构设计没有“最优解”,只有“最适配当前场景的解”,尤其对于需要兼顾“开箱即用效率”与“企业级扩展需求”的中后台框架而言,平衡感至关重要。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:JWT 集成指南

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在企业级中后台系统开发中,身份认证与授权是核心安全能力。JWT(JSON Web Token)凭借其无状态、轻量化、跨平台的特性,成为分布式系统中身份校验的优选方案。GoWind Admin 作为企业级前后端一体中后台框架,已将 JWT 核心逻辑封装至 github.com/tx7do/kratos-authn 组件中,彻底简化了底层引擎初始化、策略加载、签名验证等重复开发工作。开发者只需遵循以下标准化步骤,即可快速完成 JWT 集成,无缝对接框架的 OPA 权限管控体系,构建安全可靠的身份认证链路。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:介绍

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

风行(GoWind Admin)是一款开箱即用的企业级Golang全栈中后台管理框架,品牌slogan:让中后台开发如风般自由。

系统后端基于GO微服务框架go-kratos,前端基于Vue微服务框架Vben Admin,兼顾微服务的扩展性与单体部署的便捷性。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:站内信

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在企业级后台管理系统中,站内信是核心沟通组件之一,承担着系统通知、用户互动、业务提醒等关键场景需求。基于 Go 语言微服务框架 Kratos 构建的 Go Wind Admin,将站内信模块封装为「开箱即用」的标准化组件,无需从零开发即可快速集成,大幅降低开发成本。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:InfluxDB集成指南

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

InfluxDB 是一款采用 Go 语言开发的开源分布式时序数据库,专为时间序列数据的高效存储、查询与分析设计,由 InfluxData 公司主导开发。其核心优势在于高频写入性能、时序数据索引优化及原生聚合分析能力,广泛应用于 IoT 设备监控、系统性能指标采集、日志时序分析、金融行情跟踪等场景。在企业级中后台系统中,InfluxDB 可快速对接 GoWind Admin 框架,为实时监控面板、历史数据追溯、趋势预测分析等功能提供稳定的数据存储支撑。

一、InfluxDB 核心概念深度解析

InfluxDB 的数据模型与传统关系型数据库存在显著差异,理解以下核心概念是实现高效集成的基础。可通过与 MySQL 概念的类比快速建立认知:

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:为什么选 Golang+Vue3 这套组合?

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

企业级 Admin 系统的技术选型,既要兼顾高性能与稳定性,也要平衡开发效率与可扩展性。go-wind-admin 作为开箱即用的全栈 Admin 解决方案,最终选定 Golang 生态(后端) + Vue3 生态(前端) 的技术组合,并非偶然 —— 而是精准匹配企业级管理系统核心需求的必然选择。本文将深度拆解这套技术栈的选型逻辑,以及它如何为项目赋能。

一、后端技术栈:Golang 生态的 “精准狙击”

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:基于 GORM 从零实现新服务

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

本文将指导开发者在 GoWind Admin 企业级前后端一体中后台框架中,从零开始构建一个完整的 gRPC 服务。我们所指的 “服务” 即 gRPC 中的 service,通常包含特定数据集的 CRUD(增删改查)操作,遵循框架规范实现高可维护性与可扩展性。

前置准备

在开始前,请确保已完成以下环境准备:

开发环境

  • Go 1.19+(推荐 1.21+,支持最新语言特性)
  • Git(版本控制)
  • Protobuf 编译器(protoc,用于编译 proto 文件)
GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:基于 Ent 从零实现新服务

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

本文将指导开发者在 GoWind Admin 企业级前后端一体中后台框架中,从零开始构建一个完整的 gRPC 服务。我们所指的 “服务” 即 gRPC 中的 service,通常包含特定数据集的 CRUD(增删改查)操作,遵循框架规范实现高可维护性与可扩展性。

前置准备

在开始前,请确保已完成以下环境准备:

开发环境

  • Go 1.19+(推荐 1.21+,支持最新语言特性)
  • Git(版本控制)
  • Protobuf 编译器(protoc,用于编译 proto 文件)
GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:极速搭建微服务应用

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在企业级中后台系统开发中,开发者常常面临两大痛点:一是微服务架构搭建繁琐,从项目初始化到多服务协同需要大量手动配置;二是前后端协同成本高,接口定义、数据模型同步往往耗时费力。而 GoWind Admin(简称「风行」)的出现,正是为了解决这些问题 —— 它基于 gow CLI 工具,提供了一套开箱即用的企业级前后端一体中后台框架,让开发者能以极低成本快速搭建微服务体系。

什么是 GoWind Admin?

GoWind Admin 是一套聚焦企业级中后台场景的微服务开发框架,基于 Go 语言生态(依托 go-kratos 微服务框架)打造,整合了前后端开发所需的核心工具链。其核心优势在于「一键生成」与「高度可配置」:通过 gow 命令行工具,开发者可以快速初始化项目、创建微服务、生成接口与数据层代码,无需从零搭建架构,极大缩短开发周期。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:前端权限控制

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在企业级中后台系统中,前端权限控制是保障数据安全、规范用户操作边界的核心能力。风行·GoWind Admin 前端权限控制核心聚焦于功能权限管控,根据控制粒度的不同,分为「页面级权限」和「按钮级权限」两大模块,覆盖从“页面访问”到“操作执行”的全链路权限管控需求。本文将详细拆解两种权限的实现原理、启用方式、核心代码及最佳实践,助力开发者快速落地权限管控方案。

一、页面级权限:管控页面访问边界

页面级权限的核心目标是控制用户能否访问特定页面,主要通过「菜单隐藏」和「路由拦截」两种手段实现——未授权用户既无法在侧边栏看到目标菜单,也无法通过直接输入URL跳过菜单访问页面,进而实现对用户访问“财务报表”“人事管理”等核心页面的精准管控。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:ElasticSearch集成指南

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

ElasticSearch(简称 ES)是 Elastic 技术栈的核心组件,一款开源分布式全文搜索引擎,基于 Lucene 引擎构建,兼具实时数据存储、检索与分析能力。其分布式架构天然支持水平扩展,能轻松应对海量数据场景,凭借高吞吐、低延迟、高可用的特性,广泛应用于中后台系统的日志分析、全文检索、业务监控、数据可视化等核心模块。

GoWind Admin(风行)作为企业级前后端一体中后台框架,已对 ElasticSearch SDK 进行封装,提供标准化配置、依赖注入、通用 CRUD 封装等能力,开发者可快速集成 ES 实现数据检索与分析需求。本指南将从核心概念、环境部署、框架集成、实战示例四个维度,完整讲解 ES 与 GoWind Admin 的集成过程。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:如何搭建开发环境

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

开发环境的稳定与规范是高效开发的基础。风行·GoWind Admin 作为前后端一体的企业级中后台框架,需搭建适配的前端、后端开发环境以保障开发流程顺畅。本文将详细拆解前端、后端开发环境的搭建步骤,涵盖工具安装、插件配置、网络代理设置等核心内容,适配 Windows/macOS 主流系统,助力开发者快速完成环境初始化。

一、前端开发环境搭建

前端基于 Vue + TypeScript 技术栈,需安装代码管理、开发IDE、运行环境及依赖管理工具,同时配置 Protobuf 相关插件以支持接口定义解析。

1. 必备开发工具清单

以下工具为前端开发核心依赖,确保代码拉取、项目编译、依赖管理等流程正常运行:

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:如何进行Docker部署后端

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

Docker 部署具备环境一致性、可移植性强、部署高效等优势,是企业级应用落地的优选方案。风行·GoWind Admin 后端已将所有Docker部署相关操作封装至 Makefile 中,实现极简部署体验。本文将详细介绍两种核心部署方式、服务增减时的配置调整方法,助力开发者快速完成后端服务的容器化部署。

一、部署前提

  • 本地环境已安装 Docker(建议版本 20.10+)及 Docker Compose(建议版本 2.10+),可通过 docker -v``、docker compose version 命令验证安装。
  • 已获取 GoWind Admin 项目源码,进入后端项目根目录(即 backend 目录),所有部署命令均在此目录执行(特殊说明除外)。
  • 确保部署环境网络通畅,可正常拉取 Docker Hub 公共镜像(如 postgres、redis 等依赖组件)。
GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:代码生成工具集

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

我们为go-wind-admin这个项目打造了一个代码生成工具集。

  • cfgexp 用于将服务本地配置导入到远程配置系统,支持:Etd、Consul、Nacos……
  • sql2orm 用于把数据库的表结构导入,并且生成为ORM代码,支持:ENT、GORM……
  • sql2proto 用于把数据的表结构导入,并且生成gRPC、REST的Protobuf代码。
  • sql2kratos 用于把数据的表结构导入,并且生成一整套的Kratos服务代码。
GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:ClickHouse集成指南

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

ClickHouse 是一款由俄罗斯搜索引擎公司 Yandex 开发的开源列式存储数据库,专为海量数据实时分析设计。它以极致的查询性能和高吞吐写入能力著称,尤其擅长处理PB 级别的结构化数据,并能在毫秒到秒级内完成复杂的聚合分析(如多维度统计、漏斗计算、用户行为分析等),是大数据分析、数据仓库、实时报表等场景的核心工具。

ClickHouse 的核心概念

概念 说明
表(Table) 类似关系型数据库的表,存储结构化数据,但底层按列存储。
引擎(Engine) 决定表的存储方式、查询特性和分布式行为,是 ClickHouse 的核心设计。例如:
- MergeTree 系列:最常用,支持索引、分区、副本,适合海量数据存储;
- Log 系列:轻量无索引,适合临时小表;
- Distributed:分布式表,用于管理集群分片。
分区(Partition) 按规则(如时间、地区)将表数据拆分,查询时可快速过滤分区,减少扫描范围(如按 “日期” 分区,查询 “2023 年 10 月数据” 仅需扫描对应分区)。
主键(Primary Key) 用于排序和快速查找,不同于关系型数据库的唯一约束,ClickHouse 主键允许重复,主要作用是优化查询性能。
跳数索引(Skip Index) 辅助索引,用于快速判断某一范围内是否存在符合条件的数据(如 “数值是否在 100-200 之间”),进一步减少扫描量。
分片(Shard) 集群中数据的物理拆分单位,每个分片存储表的一部分数据,分布在不同节点,实现并行处理。
副本(Replica) 同一分片的冗余备份,用于故障恢复和负载均衡(查询可分散到不同副本),保证数据不丢失。
GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:Casbin集成指南

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

GoWind Admin(风行)作为开箱即用的企业级前后端一体中后台框架,致力于解决中后台系统开发中的通用问题,而权限管理作为中后台系统的核心安全能力,是框架设计的重中之重。Casbin 作为一款功能强大、灵活易用的开源访问控制框架,能够完美适配 GoWind Admin 的权限管理需求。本文将详细讲解 Casbin 的核心原理、配置规则,并完整呈现其在 GoWind Admin 中的集成流程与最佳实践。

一、Casbin 简介:企业级权限管理的优选方案

Casbin(https://github.com/casbin/casbin)是一款专注于访问控制的开源库,核心目标是帮助复杂系统解决权限管理的灵活性与安全性难题,也是国内开源项目中的优秀代表。其最大优势在于采用元模型设计思想,不局限于固定的权限模型,而是支持 ACL(访问控制列表)、RBAC(基于角色访问控制)、ABAC(基于属性访问控制)、RESTful 等多种经典访问控制模型,同时允许开发者根据业务需求自定义权限规则,具备极强的扩展性。 凭借卓越的设计与稳定性,Casbin 已获得全球众多企业的认可:Intel、IBM、腾讯云、VMware、RedHat、T-Mobile 等企业将其用于开源项目,Cisco、Verizon 等企业在闭源系统中采用。项目由北京大学罗杨博士于 2017 年 4 月发起,罗杨博士长期深耕云计算访问控制领域,发表数十篇相关学术论文,并在 ICWS、IEEE CLOUD、ICICS 等顶级学术会议宣讲研究成果,Casbin 正是其学术研究与工程实践结合的核心产物。

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:kratos-bootstrap 入门教程(类比 Spring Boot)

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

kratos-bootstrap 是 GoWind Admin 底层核心的应用引导框架,承担着类似 Java 生态中 Spring Boot 的角色 —— 通过标准化初始化流程、统一配置管理、简化组件集成,为开发者屏蔽基础设施搭建的复杂性。借助它,开发者无需重复编写微服务启动、配置加载、中间件注册等样板代码,可直接聚焦业务逻辑开发。本文将详细讲解如何在 GoWind Admin 中通过 kratos-bootstrap 完成应用初始化、配置管理、组件集成等关键操作,并对比 Spring 等主流框架的设计理念,帮助开发者快速上手。

一、kratos-bootstrap 在 GoWind Admin 中的角色:类比 Spring Boot 的「基础设施引擎」

GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:后端项目结构说明

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind
├─.docker
│  └─compose
├─api
│  ├─gen
│  │  └─go
│  │      ├─admin
│  │      │  └─service
│  │      │      └─v1
│  │      ├─file
│  │      │  └─service
│  │      │      └─v1
│  │      ├─system
│  │      │  └─service
│  │      │      └─v1
│  │      └─user
│  │          └─service
│  │              └─v1
│  └─protos
│      ├─admin
│      │  └─service
│      │      └─v1
│      ├─file
│      │  └─service
│      │      └─v1
│      ├─system
│      │  └─service
│      │      └─v1
│      └─user
│          └─service
│              └─v1
├─app
│  └─admin
│      └─service
│          ├─cmd
│          │  └─server
│          │      └─assets
│          ├─configs
│          └─internal
│              ├─data
│              │  └─ent
│              ├─server
│              └─service
├─pkg
├─script
└─sql
GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:后端权限控制

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

后端的权限控制主要分为两种:

  • API权限控制;
  • 数据权限控制。

在本文,我们不讨论数据权限的控制,主要讲API的权限控制。

在GO的世界里面,我们能够使用到的解决方案有:

  • Casbin
  • Open Policy Agent(OPA)
  • Zanzibar
GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:API管理

Date: 1/1/2020Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

开门见山,Kratos内置的RPC是gRPC,而gRPC是基于Protobuf作为 接口规范的描述语言(IDL,Interface Description Language)。

Golang WebRTC

Date: 1/1/2020Category: Go编程Tag: Golang, WebRTC

参考资料

  • Golang WebRTC. How to use Pion 🌐Remote Controller
  • Getting Web Development Right: WebRTC Tutorial — Golang and React.
  • From zero to fully functional video conference app using Go and webRTC
Golang设置网络代理

Date: 1/1/2020Category: Go编程Tag: Golang

打开模块支持

go env -w GO111MODULE=on
初学者友好:Go-Kratos 集成 go-crud,GORM ORM CRUD 无需重复编码,轻松上手

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

对于刚接触Go微服务开发的初学者来说,直接上手“框架+ORM”的组合常显复杂。而kratos-gorm-example项目已为我们搭建好了Go-Kratos与GORM的基础集成框架,本文将基于该项目,聚焦如何快速接入go-curd工具简化CRUD(增删改查)操作,全程以step-by-step的方式讲解,新手也能轻松跟随实操。

先明确核心工具关系:kratos-gorm-example是“基础骨架”(已整合Kratos与GORM),go-curd是“效率工具”(封装重复CRUD逻辑),我们的核心目标是“在现有骨架上装工具,让数据操作更简单”。

初学者友好:Go-Kratos 集成 go-crud,Ent ORM CRUD 无需重复编码,轻松上手

Date: 1/1/2020Category: Go编程Tag: Golang, Go-Kratos

对于刚接触 Go 微服务开发的初学者来说,直接上手 “框架 + ORM” 的组合常显复杂。而 kratos-ent-example 项目已为我们搭建好了 Go-Kratos 与 Ent 的基础集成框架,本文将基于该项目,聚焦如何快速接入 go-curd 工具简化 CRUD(增删改查)操作,全程以 step-by-step 的方式讲解,新手也能轻松跟随实操。

先明确核心工具关系:kratos-ent-example是 “基础骨架”(已整合 Kratos 与 Ent),go-curd是 “效率工具”(封装重复 CRUD 逻辑),我们的核心目标是 “在现有骨架上装工具,让数据操作更简单”。

Go 接口与代码复用:替代继承的设计哲学

Date: 1/1/2020Category: Go编程Tag: Golang

一、前言

Go 是 Google 设计的类 C 静态类型语言,兼顾底层性能与开发效率。它并非传统意义上的面向对象(OOP)语言 —— 没有 class 关键字,也不支持传统的 “继承” 语法,但通过 接口的隐式实现 和 结构体组合(嵌入),Go 能灵活实现 OOP 的核心特性(多态、代码复用),且设计更简洁、无继承带来的耦合问题。 与 C++ 相比,Go 的设计哲学是 “组合优于继承”:用接口实现多态,用结构体嵌入实现代码复用,既避免了继承的复杂语法,又解决了多重继承的歧义问题。本文将通过类比 C++ 的接口 / 继承逻辑,详解 Go 如何实现类似效果。

Go单协程事件调度器:游戏后端的无锁有序与响应时间掌控

Date: 1/1/2020Category: Go编程Tag: Golang, 算法

在游戏后端架构设计中,单协程(单线程)事件调度器(Event Loop) 是实现 “绝对消息顺序” 与 “无锁状态管理” 的核心方案。

相较于多线程模型所面临的锁竞争、竞态条件、数据一致性等复杂问题,单协程调度器通过 完全串行化执行 所有核心逻辑,从根本上规避了并发安全风险——这一特性对于对状态准确性要求极高的游戏场景(如玩家血量、金币、技能释放结果、战斗胜负判定)具有决定性意义。

然而,串行执行也带来了严苛的约束:任何一个事件的处理延迟,都会直接放大为全服玩家的体验损耗。因此,单协程调度器的核心设计目标,是在保证逻辑有序性的前提下,极致控制响应时间,守住系统稳定性红线。

排序算法实现 - Golang版

Date: 1/1/2020Category: Go编程Tag: Golang, 算法

算法列表

  • [X] 冒泡排序(Bubble Sort)
  • [X] 鸡尾酒排序(Cocktail Sort)
  • [X] 选择排序(Selection Sort)
  • [X] 插入排序(Insertion Sort)
  • [X] 归并排序(Merge Sort)
  • [X] 原地归并排序(In-place Merge Sort)
  • [X] 堆排序(Heap Sort)
  • [X] 快速排序(Quick Sort)
  • [X] 希尔排序(Shell Sort)
  • [X] 计数排序(Counting Sort)
  • [X] 基数排序(Radix Sort)
  • [X] 桶排序(Bucket Sort)
  • [X] 二叉排序树排序(Binary Tree Sort)
  • [X] 鸽巢排序(Pigeonhole Sort)
  • [X] 侏儒排序(Gnome Sort)
  • [ ] 块排序(Block Sort)
搜索算法实现 - Golang版

Date: 1/1/2020Category: Go编程Tag: Golang, 算法

算法列表

  • [X] 顺序查找(Sequential Search)
  • [X] 二叉树查找(Binary Search)
  • [X] 三叉树查找(Ternary Search)
  • [X] 插值查找(Interpolation Search)
  • [X] 斐波那契查找(Fibonacci Search)
  • [X] 指数查找(Exponential Search)
  • [X] 树表查找(Tree table lookup)
  • [X] 分块查找(Blocking Search)
  • [ ] 哈希查找(Hash Search)
从埋点到决策:Go Wind UBA 帮你一站式搞定用户行为全链路分析

Date: 4/9/2026Category: GoWind风行Tag: Golang, Go-Kratos, GoWind, UBA

在数字化时代,用户行为数据早已成为企业突破增长瓶颈、优化产品体验、防范业务风险的核心资产。无论是互联网产品的迭代优化、营销活动的精准落地,还是企业内部的安全管控,都离不开对用户行为的深度洞察。然而,传统用户行为分析流程中,埋点繁琐、数据割裂、分析滞后、决策脱节等痛点,往往让企业陷入“数据多而无用”的困境——花费大量精力采集数据,最终却无法将数据转化为可落地的业务决策。

Go Wind UBA(User Behavior Analytics,用户行为分析)的出现,正是为了破解这一行业痛点。作为基于Go语言研发的一站式用户行为全链路分析工具,它以“埋点轻量化、数据一体化、分析智能化、决策场景化”为核心,打通从数据采集(埋点)、数据处理、智能分析到决策落地的全流程,让企业无需搭建复杂的技术架构,就能快速挖掘用户行为背后的价值,实现“数据驱动业务”的核心目标。

go-wind-cms 微服务架构设计:为什么基于 Kratos?

Date: 4/9/2026Category: GoWind风行Tag: Golang, Go-Kratos, GoWind

在内容管理系统(CMS)向微服务、云原生升级的浪潮中,技术框架的选型直接决定架构的稳定性、扩展性与开发效率。作为基于 Go 语言打造的企业级 Headless CMS,go-wind-cms 摒弃了传统单体架构的局限,采用微服务架构设计,而其核心技术底座,选择了由 B 站开源、社区共建的 Kratos 微服务框架。

很多开发者会疑惑:Go 语言生态中不乏 Go-Zero、Go-Micro 等优秀微服务框架,go-wind-cms 为何独选 Kratos?答案并非单一维度的技术偏好,而是 Kratos 的设计理念、核心特性与 go-wind-cms 的业务场景、产品定位高度契合——从标准化治理到可观测性,从生态协同到业务适配,Kratos 为 go-wind-cms 提供了“开箱即用、可扩展、易维护”的微服务解决方案,完美解决了 CMS 微服务化过程中的核心痛点。