gin:包管理和路由拆分

OpenCode Go集成GPT-5.6 Luna:智能编程从助手到协作者的进化 智能编程辅助工具正从基础的代码补全向深度协作演进,其核心在于将大模型的推理与生成能力无缝融入开发全流程。这一演进基于对代码语义的深度理解,通过自然语言交互,将开发意图直接转化为可执行代码,显著提升工程效率。其技术价值在于解决了传统工具在复杂业务逻辑和项目级任务上的局限,实现了从片段补全到任务级生成的跨越。在应用场景上,特别适用于Go语言的高并发服务、微服务架构等工程实践,能够快速生成符合项目规范的CRUD操作、API端点及错误处理代码。本文聚焦的OpenCode Go与GPT-5.6 Luna结合,正是这一 阅读详情

前言

gin的路由拆分,实际就是路由模块化分组。使用路由拆分的目的在于提高代码的可读性。在简单的案例中,可以将代码都写入到一个文件中,或者几个文件中。随着项目功能逐渐加多,又没有合理的分层分组,可读性会因代码增加而越来越低。路由拆分实际也是一种代码的模块化管理方式(主要对于路由的管理)。

包管理

go中一个文件夹为一个包。项目根目录为main,main包是无法给同一项目下的其他包引用的

这里使用demo作为项目名

文件内package的命名

如果是项目根目录,使用main,其余的文件使用所在的那个文件夹名称,不能写入完整的目录层级。例如/service/blogdir/blog.go文件(第一个斜杠表示项目根目录即main目录),package使用package blogdir

引用的起点

引用的起点是从项目名开始,按目录层级写到功能所在文件夹。例如/service/blogdir/blog.go,blog.go中有一个SayHello()方法。

引用使用:

import("demo/service/blog")

// 略... 
blog.SayHello()
// 略... 

gin路由拆分

没有规定一定使用哪种分层,每种合适路由拆分方式都有它的适用场景。我这里使用用gva(gin-vue-admin)的路由划分思路。

目录结构如下

请添加图片描述

所有的enter.go作用是将本目录下的所有包整合到enter.go中,以便外部引用。

添加一个路由

  1. 在api/v1中定义一个处理方法,传入的参数为gin.Context(为了方便这里就不加入enter中)

    //  \api\v1\demo.go
    package v1
    
    import (
    	"fmt"
    	"github.com/gin-gonic/gin"
    )
    type DemoController struct {
    }
    
    func (dc *DemoController) Demo(c *gin.Context) {
    	fmt.Println("demo")
    }
    
  2. 定义一个路由,添加到enter中

    // \router\example\demo.go
    package example
    
    import (
    	v1 "github.com/flipped-aurora/gin-vue-admin/server/api/v1"
    	"github.com/gin-gonic/gin"
    )
    
    type DemoRouter struct{}
    
    
    func (d *DemoRouter) InitDemoRouter(r *gin.RouterGroup) {
    	// 可以添加组和中间件(r.Use())
    	r.Group("demo")
    	DemoController := &v1.DemoController{}
    
    	// 绑定路由和处理方法 /demo/demo01
    	r.GET("demo01",DemoController.Demo)
    	r.POST("demo02",DemoController.Demo)
        // ...
    }
    
    
  3. 将绑定好的路由组添加到当前enter.go文件中,目的是为了整合当前文件夹中的所有路由

// router\example\enter.go

请添加图片描述

  1. (按需)如果是新的文件夹,需要再上一层,找到enter文件,加新文件中的enter.go中的结构体加入其中。

请添加图片描述

  1. 最后在初始化的时候注册所有路由、绑定中间件等

    // initialize\router.go
    

请添加图片描述

  1. 启动项目,在浏览器中访问{地址}/demo/demo01,控制台会得到:

    demo
    

    说明路由生效了。

通过继承减少方法的层级

刚定义的路由包裹的层级是这样的:RouterGroup.RouterGroup.DemoRouter.InitDemoRouter()

前两个RouterGroup是上两级目录下的enter.go路由整合文件。

请添加图片描述请添加图片描述

(/router/example) RouterGroup中继承了当前文件夹中的所有类。所以在上一级(/router下)的RouterGroup,通过Example属性就可以直接访问到/router/example下的所有路由初始化方法。这样就减少了多层级的方法访问。

gva的拆分是否过于麻烦?

在写这篇博客前我在想gva的路由划分实在太麻烦,多个enter.go文件叠加让人觉得眼花缭乱。如果在router文件夹下只使用一个go文件来整合路由,路由分组再另外使用一个文件夹划分,层级上就只有一级。这样好像更加的简洁。如下:
请添加图片描述

看起来是简洁了, 但是当路由的数量增多后,一个文件n行的初始化;文件内容太多,还是要面临继续拆分的问题,最终可能还是回到了gva这种拆分方式.

开发中没有银弹

总结

路由拆分实际是一种代码的模块化管理方式。每种合理的拆分的方式都有其适用的场景。选择适合的拆分方式,提高项目的可读性

OpenClaw工程实战 OpenClaw工程实战总览摘要 OpenClaw是一款面向AI Agent开发的全栈式解决方案,采用四层模块化架构(基础设施层、核心引擎层、生态组件层和应用适配层)。文档全面覆盖从环境配置到企业落地的九大技术板块,包含MCP协议实战、多Agent编排、商业级项目实践等核心内容。系统支持全场景部署(本地/云端/边缘设备),集成3286个市场技能,通过Gateway网关实现智能路由与多模型调度。典型应用场景包括企业数字化、开发者提效和全渠道智能助手。 阅读详情

相关推荐

Argoverse轨迹预测实战:从数据加载到地图API应用全解析

本文详细解析了Argoverse数据集在轨迹预测中的应用,从数据加载到地图API的实战技巧全涵盖。通过具体代码示例展示如何高效处理轨迹数据、实现可视化及基础预测模型,帮助开发者快速掌握自动驾驶轨迹预测的核心技术。特别介绍了Argoverse地图API的深度应用和性能优化经验。

weixin_29182481的博客 242

【搞定Go语言】第3天12:gin框架路由拆分与注册

本文总结了我平时在项目中积累的关于gin框架路由拆分与注册的若干方法。 gin框架路由拆分与注册 基本的路由注册 下面最基础的gin路由注册方式,适用于路由条目比较少的简单项目或者项目demo。 package main import ( "net/http" "github.com/gin-gonic/gin" ) func helloHandler(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "Hello q1mi!

就叫一片白纸的博客 1037

ExcelVBA批量添加PDF文件

如图1所示,"BOM-01.xlsx"工作簿中的Sheet1工作表根据B列图号单元格中的内容,在图2所示的文件夹中找到对应的PDF文件,然后嵌入到相应的N列,双击N列中所示的图标,会打开PDF文件,是源文件的副本,即删除源文件,也可以打开N列的文件。 图1 根据B列的图号在N列嵌入对应的PDF文件 图2 PDF文件 图3 文件格式 Sub 导入文件() Ap...

qq389445046的博客 5579

Go语言中的gin框架如何抽离出路由且控制器实现继承(六)

以上就是 对控制器 loginControllers.go 文件的具体代码,并且,可以看出,如何从路由分组阶段,演化成 有控制器进行更细化的分类处理,路由中的函数处理方法抽离。可扩展性:当需要添加新的路由时,只需要在相应的路由组中添加即可,而不需要修改主文件中的代码,提高了代码的可扩展性。可配置性:通过路由组,可以对不同的路由分别进行配置,例如设置路由组级别的中间件、路由组级别的错误处理函数等。同时,这也缺少了一部分,关于函数是可以继承的,那么对应的控制器文件下,同一个包内是否可以通用呢,答案是……

A_LWIEUI_Learn的博客 742

Google OR-Tools的CP-SAT求解器,为什么比传统线性规划更适合你的组合优化问题?

本文深入解析Google OR-Tools中的CP-SAT求解器为何比传统线性规划更适合解决组合优化问题。CP-SAT融合约束规划与可满足性理论,原生支持复杂逻辑约束和离散决策,在物流、生产调度等领域展现出显著优势。通过技术对比和实战案例,展示CP-SAT在处理高组合复杂度问题时的卓越性能。

weixin_28700593的博客 927

ABAP代码检查(Code Review)

1、SLIN 扩展程序检查 也可通过(SE38工具栏->检查-扩展程序检查) 进入 2、ATC 检查 通过<SE38菜单栏-检查-ABAP测试主控室> 或事物代码SCI, 支持自定义检查变式 SCI可以配置检查变式满足特殊需求,配置对象集用于批量检查 3、通过ABAP测试主控室实现统一管理,定期检查作业和监控功能(事务代码ATC) 参考 SLIN...

u012232542的博客 6070

基于gin-vue-admin的路由部分拆解

基础写法● 这里的方法实现是用一个匿名方法完成的// c.JSON:返回JSON格式的数据 c . JSON(200 , gin . H {抽离写法● 这是用调用具体的方法实现的} // 查询video func(videoController * VideoController) FindVideos(c * gin . Context) {

weixin_62360776的博客 450

RedPitaya火龙果板基础操作

火龙果板基础操作一级目录二级目录三级目录 一级目录 二级目录 三级目录

qq_41523340的博客 9731

gin框架项目重构关注分离

gin框架大致结构

weixin_55761900的博客 312

Plecs电力电子仿真专业教程-第一季 第一节 Plecs简介

Plces 电力电子仿真专业教程系列依托专业的电力电子仿真软件Plecs对各种电力电子常用的拓扑及实际设计的方案进行系统及仿真与软件代码仿真实践。通过对各种电路仿真原理的讲解及专业C语言代码程序的编写,提升学员的系统设计能力,软件编程能力与理论分析能力。

3648

【UML】-- 期末试题题库含答案(各章题目、选择题、填空题、简答题、画图题)

每章都有对应的题目和答案,选择题,填空简答,大题,答案已标红,方便大家观看

个人博客 1万+

Golang框架Gin入门实战--(6)Gin路由文件抽离

Golang框架Gin入门实战--(6)Gin路由文件抽离

小啊宇的博客 825

Unity 面试篇|(四)Unity性能优化篇 【全面总结 | 持续更新】

Unity中,CPU准备好需要绘制的元素,对底层图形程序接口进行调用的过程,每次引擎准备数据并通知GPU的过程称为一次Draw Call。DrawCall越高对显卡的消耗就越大。降低DrawCall的方法:动态合批静态合批降低shader的等级特性场景优化策略——遮挡技术。rectMask2D替代Mask。

游戏开发小Y的博客 13万+

JNA 快速上手:从纯 Java 调用 C 函数与系统 API,不写一行 JNI

JNA(Java Native Access)让 Java 代码直接调用原生共享库里的函数:你只需要声明一个接口,不用写 JNI,不用编译 C 绑定。它是 Java 程序接入 C 库和系统 API 的低成本路线,Cassandra、Elasticsearch、IntelliJ 这类知名项目都在用它。 ## JNI 路线的代价:逐平台编译与维护 Java 调原生函数的常规路线是 JNI:写 C

gitblog_00481的博客 688

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

迁移到 Composable Architecture 1.7:用 Swift Observation 全面取代 ViewStore、IfLetStore 与 ForEachStore

本指南基于 [MigratingTo1.7.md](https://link.gitcode.com/i/c0a1a223df1c5887a87b148e1b1a1c82) 官方迁移文档,讲解如何将基于 `WithViewStore`、`IfLetStore`、`ForEachStore`、`SwitchStore` 等"旧观察工具"编写的 TCA 代码,升级到以 `@ObservableStat

gitblog_00868的博客 291

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Go语言新手避坑指南:初学者常踩的3大框架使用误区(附最佳实践)

避开误区,高效上手go语言常用框架。本文解析初学者易犯的3大错误,涵盖Web开发与微服务场景,结合Gin、Echo等框架的最佳实践,提升开发效率与代码质量。值得收藏

BreakVein的博客 325

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Go学习】实现一个用其他终端远程控制电脑鼠标的小程序

先放github 前言 近日打算稍微学习一下Go,便打算给自己一个小作业做做。考虑到最近想躺在床上玩gal,便想尝试写一个能用手机简单操控电脑的小程序(实际上用无线鼠标或JoyTokey+无线手柄更好,但得给自己找事做一个理由)。也许也可以帮到想躺在床上看电视剧的人。想使用的可以直接解压仓库中RemoteMouse.zip打开main.exe打开服务器(会提示防火墙权限,选家用网络即可)。 使用预览: 涉及语言: Go HTML + JS + CSS 涉及Toolkit: Go: rob

c980129的博客 1241

Vue.js与Go全栈开发实战:构建现代化数学计算应用完整指南

在当今全栈开发领域,Vue.js与Go语言的结合为开发者提供了一个强大而高效的技术栈选择。这个Vue.js和Go示例项目展示了如何构建一个完整的数学计算应用,通过现代化前端框架与高性能后端语言的完美结合,实现了数据生成、统计分析、可视化展示等核心功能。本文将深入解析这个项目的架构设计、实现原理以及最佳实践,帮助开发者掌握全栈开发的关键技术。 ## 🔧 项目核心价值与技术定位 **Vue.js

gitblog_00396的博客 1015

MediaGo 开发者上手指南:从零搭建跨平台视频下载器的本地开发环境

本篇指南围绕 MediaGo 仓库的贡献文档([CONTRIBUTING.md](https://link.gitcode.com/i/82320c369c733f5d3eb01edc86181f9d))展开,系统讲解从环境准备、仓库克隆到日常开发、构建、测试与提交规范的全部流程,并结合仓库内的 [Taskfile.yml](https://link.gitcode.com/i/5c135890b

gitblog_00724的博客 157

C++微服务聊天系统架构设计:从高并发网络模型到分布式一致性实战

微服务架构通过将单体应用拆分为独立部署、松耦合的服务,已成为构建可扩展、高可用分布式系统的核心范式。其核心原理在于服务边界的清晰划分与服务间的协同通信,技术价值体现在提升开发效率、便于技术栈选型及实现弹性伸缩。在即时通讯、电商平台、物联网等高频交互场景中,微服务能有效支撑海量并发与复杂业务逻辑。本文聚焦于利用C++构建高性能聊天系统,深入探讨了基于epoll的Reactor网络模型以应对高并发连接,并详细阐述了通过事件驱动与消息队列(如RabbitMQ/Kafka)实现服务间解耦与数据最终一致性,为追求极致

weixin_30681121的博客 339

PatchMon企业级补丁管理平台架构解析:从单体应用到分布式监控的演进路径

PatchMon是一个面向企业级Linux、FreeBSD和Windows服务器的现代化补丁管理与自动化平台,采用Go语言构建的单体二进制架构,集成了React前端、PostgreSQL数据库和Redis队列系统。该平台解决了传统补丁管理工具在安全性、可扩展性和实时性方面的核心痛点,通过仅出站(outbound-only)的代理设计,消除了对入站防火墙规则的依赖,实现了零信任网络环境下的安全补丁部

gitblog_00018的博客 412

Vercel 上的 Angular CLI 8 项目:从本地开发到云端构建部署的完整指南

本文以当前仓库 [packages/static-build/test/fixtures/angular-v8/README.md](https://link.gitcode.com/i/a01743d975cb60f1e45aad2c61941cb6) 为骨架,完整讲解一个由 Angular CLI 8.1.0 生成的 Angular 项目的本地开发、代码生成、构建、单元测试与端到端测试全流程,

gitblog_00577的博客 643

Vue核心机制全解析:从响应式原理到项目部署实战

在现代化前端开发中,Vue作为主流渐进式框架,其独特的响应式系统与组件化设计,让开发者从繁琐的DOM操作中解放出来,转向以数据驱动视图。理解虚拟DOM、依赖追踪、computed与watch的适用边界,是提升工程效率的关键。从路由配置到前后端分离联调,再到Vite构建部署,Vue生态提供了完整的解决方案。本文深入Vue核心设计思路,讲解响应式数据、模板编译、组件通信与生命周期管理,并结合高频报错场景给出排查思路,帮助开发者建立系统认知,实现从“会用”到“会设计”的进阶。

weixin_34343000的博客 196

前端与后端开发全解析:从核心职责到技术栈与职业发展

在软件开发领域,前端与后端是构建现代应用的两大核心支柱。前端开发聚焦于用户界面与交互体验的实现,负责将设计转化为用户可直接感知和操作的网页或应用,其技术核心围绕HTML、CSS和JavaScript展开,并衍生出React、Vue等主流框架,以构建动态、响应式的单页面应用。后端开发则专注于业务逻辑、数据处理与系统服务,通过构建API接口、设计数据库和处理高并发请求,为前端提供稳定、安全的数据支持,其技术栈涵盖Java、Go、Python等多种语言及Spring Boot、Django等框架。理解前后端分离架

weixin_33919950的博客 474

智能体开发语言选择指南:Python、Go、JS 如何匹配任务与场景

在软件开发领域,技术选型是项目成功的关键基础,尤其当涉及智能体这类复杂系统时,编程语言的选择直接决定了开发效率、系统性能和长期可维护性。其核心原理在于,不同语言的设计哲学、运行时特性和生态系统,分别优化了不同类型的计算任务,例如I/O密集型、计算密集型或快速原型开发。从技术价值看,合适的语言能最大化团队生产力,并确保智能体在目标部署环境中稳定运行。常见的应用场景包括:构建依赖丰富AI生态的模型推理智能体、开发高并发的云原生服务,或创建与前端深度集成的交互式应用。本文聚焦于智能体开发,深入分析了Python在

weixin_33785108的博客 354

Hermes 文档管理系统深度解析:构建企业级文档协作平台的架构设计

在当今数字化工作环境中,**企业级文档管理系统**已成为提升团队协作效率的关键基础设施。Hermes 作为一款由 HashiCorp 实验室开发的开源文档管理系统,专为规模化文档协作而设计,为企业提供了完整的**文档管理协作平台**解决方案。本文将深度解析 Hermes 的核心架构、技术实现和**企业级部署方案**,为技术决策者提供专业的实施指南。 ## 项目定位与核心价值 Hermes 的核

gitblog_00029的博客 506
上一篇: js:封装几个JQ的功能
下一篇: css3:媒体查询
jayLog
博客等级 码龄7年 318粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jayLog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值