Goframe快速创建项目,并使用Cli工具创建dao、service、logic

news/2024/4/25 18:10:01/文章来源:https://blog.csdn.net/weixin_45941687/article/details/129237324

GoFrame项目创建与Cli工具创建

  • 1.项目创建
  • 2.Mysql数据库配置
  • 3.Cli工具dao自动生成
  • 4.业务模型须知
  • 5.Cli工具service/logic自动生成 - 接口
  • 6.Controller/Api创建

1.项目创建

官网 - 项目创建-init
开发文档 - 目录介绍
官网 - 示例项目

1.gf init 项目名 	(创建项目,项目最外层文件还没有创建时)
2.gf init .				(创建项目,项目最外层文件 已创建 )
3.go get -u github.com/gogf/gf/v2	(项目根目录下更新升级框架版本)

在这里插入图片描述

2.Mysql数据库配置

ORM使用配置
1.main.go 引入驱动

import (_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
)

2.main.go 添加依赖

import (_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
)

3.config.yaml 配置文件

//link : 类型:账号:密码@协议(地址)/数据库名称?特性配置
database:logger:level: "all"stdout: truedefault:link: "mysql:root:root@tcp(127.0.0.1:3306)/test"debug: true

3.Cli工具dao自动生成

数据规范-gen dao

1.创建配置 hack/config.yaml

# GoFrame CLI tool configuration.
#gfcli:
#  gen:
#    dao:
#      - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
#        tables: "user"
#        removePrefix: "gf_"
#        descriptionTag: true
#        noModelComment: true#gfcli:
#  gen:
#    dao:
#      - link:     "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
#        tables:   "order,products"
#        jsonCase: "CamelLower"
#
#      - link:   "mysql:root:12345678@tcp(127.0.0.1:3306)/primary"
#        path:   "./my-app"
#        prefix: "primary_"
#        tables: "user, userDetail"
#
#  # sqlite需要自行编译带sqlite驱动的gf,下载库代码后修改路径文件(gf\cmd\gf\internal\cmd\cmd_gen_dao.go)的import包,取消注释即可。sqlite驱动依赖了gcc
#  - link: "sqlite:./file.db"gfcli:gen:dao:- link: "mysql:root:root@tcp(127.0.0.1:3306)/test-all"tables: "user"descriptionTag: truenoModelComment: true

在这里插入图片描述
2.执行命令

gf gen dao
//命令会生成 几个文件
//		/internal/dao			数据操作对象  - 可扩展修改,但是往往没这种必要
//		/internal/model/do			数据转换模型 - 工具维护,用户不能修改。
//		/internal/model/entity			数据模型 - 用户不能修改。工具每次生成代码文件将会覆盖该目录

dao: 操作采用规范化设计,必须传递 ctx 参数,并在生成的代码中必须通过 Ctx 或者 Transaction 方法创建对象来 链式 操作数据表。操作数据表即是通过DAO对象以及相关操作方法实现

在这里插入图片描述

在这里插入图片描述

4.业务模型须知

数据模型 与 业务模型

model中的模型分为两类:数据模型和业务模型。数据模型:cli工具生成的 model/entity , 一般不应该修改,数据模型只有在数据表结构变更时通过CLI工具自动更新。数据模型由CLI工具生成及统一维护。业务模型:业务模型即是与业务相关的数据结构,按需定义,就是service里面需要的结构体,放到model文件夹下,根据业务自定义维护

业务模型

业务模型主要包含两类:接口输入/输出模型 与 业务输入/输出模型,由model模型层统一管理。1.接口输入/输出模型,通常api调用,以XxxReq和XxxRes格式命名2.业务输入/输出模型,以XxxInput和XxxOutput格式命名。

5.Cli工具service/logic自动生成 - 接口

  • internal/service包 维护
  • internal/service 可以由开发者自定义维护接口
    接口维护-gen service
1.导入配置文件 watchers.xml ( 从接口接口维护 - gen service 下载 )
2.编写logic文件夹下逻辑代码
【以logic目录为例,gf gen service只会解析logic/xxx/*.go文件。因此,需要logic层代码结构满足一定规范。】
3.执行 gf gen service
【生成 service文件夹下文件 和 logic/logic.go文件(接口注册文件)】
4.服务实现注入 (仅一次)
func init() {service.RegisterXXX(New())
}
5.在启动文件main.go中引用接口实现注册(仅一次)- 命令”gf gen service“ 会生成/login/logic.go文件- 然后在main.go导入,该文件的引入需要在main包的最顶部引入,需要注意import的顺序,放到最顶部,后面加一个空行。如果同时存在packed包的引入,那么放到packed包后面。
如下
import (_ "demo/internal/logic"
)

在这里插入图片描述

6.Controller/Api创建

关于goframe2.0规范路由——请求结构体与响应结构体
接口文档-OpenAPIv3

// 1. Controller
// 注册
func (c *cUser) SignUp(ctx context.Context, req *v1.UserSignUpReq) (res *v1.UserSignUpRes, err error) {err = service.User().Create(ctx, model.UserCreateInput{Passport: req.Passport,Password: req.Password,Nickname: req.Nickname,})return
}// 2. api
// meta path:"/user/sign-up" 可以不标识
type UserSignUpReq struct {g.Meta    `path:"/user/sign-up" method:"post" tags:"UserService" summary:"用户注册"`Passport  string `v:"required|length:6,16"`Password  string `v:"required|length:6,16"`Password2 string `v:"required|length:6,16|same:Password"`Nickname  string
}type UserSignUpRes struct{}// 3.接口访问路径
http://127.0.0.1:8001/user/sign-up//-------------------------------
// 1 controller 编写接口
// 2 api 编写 xxRes xxReq

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_75160.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java及JVM简介

世界上没有最好的编程语言,只有最适用于具体应用场景的编程语言 懂得JVM内部的内存结构、工作机制,是设计高扩展性应用和诊断运行时问题的基础,也是Java工程师进阶的必备能力。 java介绍 java是目前应用最为广泛的软件开发平台之一。随着…

C++---最长上升子序列模型---登山(每日一道算法2023.2.28)

注意事项: 本题为"线性dp—最长上升子序列的长度" 和 “最长上升子序列模型—怪盗基德的滑翔翼” 的扩展题,所以dp思路这里就不再赘述。 题目: 五一到了,ACM队组织大家去登山观光,队员们发现山上一共有N个景…

复习知识点八之数组

目录 数组 静态初始化练习 打印 索引 数组遍历 练习1:遍历数组并求和 练习2:统计个数 练习3:变化数据​编辑 数组的动态初始化 数组的动态初始化和静态初始化的区别​编辑 数组的常见问题 数组常见操作 练习1:求最值 ​编辑 练习2 : 遍历数组求和 练习3: 练习4: 数…

值得收藏!适合小微企业的万元数字化攻略!

编者按:小微企业数字化之路困难重重?看看这款全新的全面数字化方案,低成本、部署效率、免安装、免维护、数据安全,小微企业的数字化福音!关键词:低成本,开箱即用,免安装免维护&#…

SpringMVC使用 redis 实现缓存

简介 SpringMVC 中也可以将缓存标签和 redis 结合起来使用,其实此时缓存没有起作用,只是通过缓存的那几个注解来操作 redis 而已;SpringMVC 中整合 redis 比较麻烦的是注意版本冲突的问题,如下是官网有关于版本的要求 https://d…

I.MX6ULL内核开发12:使用设备树插件实现RGB灯驱动

目录 一、引言 二、设备树插件格式 三、实验说明 四、实验准备 4.1 通过内核工具编译设备树插件 五、实验效果 5.1 uboot加载 5.2 加载RGB驱动 一、引言 Linux4.4以后引入了动态设备树(Dynamic DevicesTree),这里翻译位“设备树插件…

银行软件测试面试题目总结,希望可以帮到你

目录 一、根据题目要求写出具体LINUX操作命令 二、JMETER题目 三、根据题目要求写出具体SQL语句 总结感谢每一个认真阅读我文章的人!!! 重点:配套学习资料和视频教学 一、根据题目要求写出具体LINUX操作命令 1、分别写出一种…

SpringMVC源码:HandlerMapping加载1

参考资料: 《SpringMVC源码解析系列》 《SpringMVC源码分析》 《Spring MVC源码》 写在开头:本文为个人学习笔记,内容比较随意,夹杂个人理解,如有错误,欢迎指正。 前文: 《SpringMVC源码&a…

跨设备文件传输工具横评

文章目录对比QQ微信SnapDropLocalSendIntelUnisonLANDropTailscaleAirDroidSendAnywhere参考文献对比 传输速度测试条件大致相同,文件大小约为 100 MB 工具优点缺点传输速度备注QQ支持断点续传不要求同一局域网需要安装1.81 MB/s微信方便需要安装不支持大文件传完还…

ROS1学习笔记:ROS中的坐标管理系统(ubuntu20.04)

参考B站古月居ROS入门21讲:ROS中的坐标系管理系统 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、机器人中的坐标变换二、TF功能包三、小海龟跟随实验3.1 启动实验3.2 查看当前的TF树3.3 坐标相对位置可视化3.3.1 tf_echo3.3.2 rviz一、机器人中的坐标变换…

15个Spring扩展点,一般人知道的不超过5个!

Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Spring Boot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引用了一个…

Maven高级操作,别说你不知道

如果文章对你有帮助欢迎【关注❤️❤️❤️点赞👍👍👍收藏⭐⭐⭐】一键三连!一起努力! 🤖 一、聚合 👻 1、作用: 用于快速构建maven工程,一次性构建多个模块/项目 &am…

【人脸识别】DDL:数据分布知识蒸馏思想,提升困难样本(遮挡、低分辨率等)识别效果

论文题目:《Improving Face Recognition from Hard Samples via Distribution Distillation Loss》 论文地址:https://arxiv.org/pdf/2002.03662v3.pdf 代码地址:https://github.com/HuangYG123/DDL 1.前言及相关工作 Large facial variatio…

阿里前端二面常考react面试题(必备)

说说 React组件开发中关于作用域的常见问题。 在 EMAScript5语法规范中,关于作用域的常见问题如下。 (1)在map等方法的回调函数中,要绑定作用域this(通过bind方法)。 (2)父组件传递…

华为OD机试模拟题 用 C++ 实现 - 最左侧冗余覆盖子串(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明最左侧冗余覆盖子串题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写…

HCIP-5距离矢量路由协议RIP学习笔记

前言 路由信息协议RIP(Routing Information Protocol)的简称,它是一种基于距离矢量(Distance-Vector)算法的协议,使用跳数作为度量来衡量到达目的网络的距离。RIP主要应用于规模较小的网络中。Rip是第一个动…

RK3568平台开发系列讲解(驱动基础篇)SMP(Symmetrical Multi-Processing)

🚀返回专栏总目录 文章目录 一、linux SMP 和 AMP二、linux SMP的启动流程三、CPU的描述:cpumask四、CPU之间的关系沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 SMP(Symmetrical Multi-Processing)。 一、linux SMP 和 AMP 目前支持多核处理器的实时操…

QT学习14:QtXlsx操作Excel表

一、前言操作excel方式有:QAxObject 和QtXlsx区别:Qt自带的QAxObject库操作excel的前提是电脑已经安装微软的Office(包含EXCEL),而QtXlsx可以直接使用免装Office且操作更简单。二、QtXlsx操作示例参考:http…

【Solved】java.lang.IllegalStateException: Could not delete shutdown key file

详细错误: Exception in thread “main” java.lang.IllegalStateException: Could not delete shutdown key file at edu.stanford.nlp.pipeline.StanfordCoreNLPServer.(StanfordCoreNLPServer.java:219) at edu.stanford.nlp.pipeline.StanfordCoreNLPServer.lau…

IDOR漏洞

IDOR漏洞 一、概述 IDOR,Insecure Direct Object reference,即"不安全的直接对象引用",场景为基于用户提供的输入对象进行访问时,未进行权限验证,是一类访问控制漏洞。在OWASP API安全前10名的API漏洞中排名…