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

news2025/1/16 8:08:13

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.config.yaml 配置文件

//link : 类型:账号:密码@协议(地址)/数据库名称?特性配置
database:
  logger:
    level: "all"
    stdout: true
  default:
    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: true
        noModelComment: 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.coloradmin.cn/o/379049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无法定位程序输入点kernel32.dll,如何修复kernel32.dll

kernel32.dll是Windows操作系统中非常重要的一个系统文件,如果它丢失或损坏可能会导致许多应用程序无法正常运行。今天小编就来给大家详细的讲解一下无法定位程序输入点kernel32.dll,我们要怎么修复这个kernel32.dll缺失的问题。 一.kernel32.dll时候什么…

前端开发环境配置,浏览器跨域配置,代码提交配置git等

这是我目前公司的开发配置文档大家可以参考: 前端文档 1 搭建前端环境 1.1 安装nodejs 1.1.1 nodejs下载地址 https://nodejs.org/dist/v10.15.3/node-v10.15.3-x64.msi(win64) https://nodejs.org/dist/v10.15.3/node-v10.15.3.pkg&…

查询性能较 Trino/Presto 3-10 倍提升!Apache Doris 极速数据湖分析深度解读

从上世纪 90 年代初 Bill Inmon 在《building the Data Warehouse》一书中正式提出数据仓库这一概念,至今已有超过三十年的时间。在最初的概念里,数据仓库被定义为「一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理…

Python排序 -- 内附蓝桥题:错误票据,奖学金

排序 ~~不定时更新🎃,上次更新:2023/02/28 🗡常用函数(方法) 1. list.sort() --> sort 是 list 的方法,会直接修改 list 举个栗子🌰 li [2,3,1,5,4] li.sort() print(li) …

New Bing怼人、说谎、PUA,ChatGPT已经开始胡言乱语了

最近,来自大洋彼岸那头的ChatGPT科技浪潮席卷而来,微软将chatGPT整合搜索引擎Bing开启内测后,数百万用户蜂拥而至,都想试试这个「百事通」。 赶鸭子上架,“翻车”了? 但短短上线十几天,嵌入了…

5个开源的Java项目快速开发脚手架

概览 : GunspigRuoYiJeecg-bootiBase4J 一、Guns 推荐指数 :⭐⭐⭐⭐⭐ 简介 采用主流框架 : 基于 Spring Boot2.0版本开发,并且支持 Spring Cloud Alibaba 微服务。功能齐全 :包含系统管理,代码生成&a…

python线程池【ThreadPoolExecutor()】批量获取博客园标题数据

转载:蚂蚁学python 网址:【【2021最新版】Python 并发编程实战,用多线程、多进程、多协程加速程序运行】 https://www.bilibili.com/video/BV1bK411A7tV/?p8&share_sourcecopy_web&vd_sourced0ef3d08fdeef1740bab49cdb3e96467实战案…

SpringMVC 面试题

1、什么是SpringMVC? SpringMVC是一个基于Java的实现了MVC设计模式的“请求驱动型”的轻量级WEB框架,通过把model,view,controller 分离,将web层进行职责的解耦,把复杂的web应用分成逻辑清晰的几个部分&am…

Arduino-PWM调光

PWM调光实验什么是PWM?PWM是(Pulse Width Modulation)的简称,中文我们说这是脉冲宽度调制。脉冲宽度调制是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通…

react 函数式组件的hooks

目录 useState useEffect useCallback useMemo useRef useContext useReducer 自定义hooks useState 函数式组件的状态 ,格式: const [value,setValue] useState( {xxxx} ) console.log([value, setValue])打印一下可以看到: value…

腾讯安全与锐捷网络战略合作,威胁情报能力“被集成”

2月28日,腾讯安全和锐捷网络在北京联合举办“威胁情报”战略合作发布会。双方发布了一款集成了腾讯安全威胁情报的新一代防火墙,并举办战略合作签约仪式。会上,锐捷网络安全产品事业部总经理项小升、腾讯安全总经理陈龙代表双方签署战略合作协…

taobao.user.avatar.get

¥开放平台基础API不需用户授权 根据混淆nick查询用户头像 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 点击获取key和secret 请求参数 请求示例 TaobaoClient client new DefaultTaobaoClient(url, appkey,…

MyBatis中#{}和${}的区别

目录 前言 1、处理参数的方式不同 2、${}的优点 3、SQL注入问题 4、like查询问题 前言 #{}和${}都可以在MyBatis中用来动态地接收参数,但二者在本质上还是有很大的区别。 1、处理参数的方式不同 ${} :预编译处理 MyBatis在处理#{}时&#xff0c…

【Android】全局加载框的使用

项目需求 在网络加载中使用网络加载框,在请求数据或者其他耗时操作的时候,显示加载框,当数据返回之后或者操作完成的时候加载框取消。 效果如下: 需求实现 使用一个开源库【Gloading】实现 项目地址链接: Gloading 1.引入依赖…

umi 中如何使用 px2rem 插件做rem适配

umi 中如何使用 px2rem 插件做rem适配在umi的src下面创建两个文件app.ts和document.ejs下载lib-flexible和postcss-px2rem-exclude在.umirc.ts文件中进行配置和postcss-px2rem-exclude的引入在app.ts文件中引入lib-flexible如果px2rem配置无法生效,那么我们就要在do…

Javascript的API基本内容(五)

一、js组成 JavaScript的组成 ECMAScript: 规定了js基础语法核心知识。 比如:变量、分支语句、循环语句、对象等等 Web APIs : DOM 文档对象模型, 定义了一套操作HTML文档的API BOM 浏览器对象模型,定义了一套操作浏览器窗口的API 二、loc…

JavaScript从零开始 学习记录(二)

前言 寒假花了大气力去整理公众号,因而一些任务没有完成,但没有关系,毕竟计划赶不上变化,接着学习,争取早日开发油猴脚本 笔记范围 从这节视频到那节视频结束 课程目标 能够知道为什么要有数组能够创建数组能够获…

“来源可靠、程序规范、要素合规”与“四性”

《从技术可行性的视角看电子档案的“四性”》一文中已经明确,笔者认为的电子档案“四性”是指“真实性、完整性、可用性和安全性”。而《从特斯拉“刹车失灵”事件看电子档案的法定要求》一文中,笔者对于“来源可靠、程序规范、要素合规”的解读如下&…

Qt基础之三十:百万级任务并发处理

在实际的开发过程中,经常会遇到要处理大量任务场景,比如说压缩文件夹中的所有文件、对文件夹中的所有文件加密、上传文件夹中的所有文件到ftp等等。这里说百万级并不夸张,理论上文件夹中有任意多个文件都是可以的。 本文以压缩文件夹中的100万张jpg图片为例,压缩工具使用的…

外卖扫码点餐系统源码 后台管理端+商家端+门店端+小程序用户端源码

外卖点餐 堂食点餐 扫码点餐 本套扫码点餐系统源码基于java语言开发,移动端原生小程序,SaaS模式。代码完整,带部署调试视频。 系统由总后台管理端商家端门店端小程序用户端组成,支持扫码点单、计费结账、出菜上菜、菜品管理、菜…