自学内容网 自学内容网

GoFrame学习笔记

官方地址:https://goframe.org/display/gf
视频地址: https://www.bilibili.com/video/BV1Uu4y1u7kX/?vd_source=707ec8983cc32e6e065d5496a7f79ee6


一、下载与安装

https://github.com/gogf/gf/releases
在这里插入图片描述

  • 在系统变量的Path里设置一个GoFrame的安装目录
  • 点击安装:
    在这里插入图片描述
  • 选择目录
    在这里插入图片描述
  • 安装完成后,目录下出现一个gf.exe文件
  • 在cmd里输入gf -v,出现以下信息,说明安装完成
    在这里插入图片描述

二、配置与创建

  • 配置代理,在cmd中输入
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn
  • 创建项目,-u 把框架初始化到最新版本,若不需要更新,可以不写
gf init gf_demo -u
  • 进入gf_demo目录,输入gf run main.go,启动程序
  • 输入浏览器,http://127.0.0.1:8000/hello,看到Hello World!

三、GoLand打开GoFrame项目

  • GoLand可以在插件搜索GoFrame,安装GoFrame Helper插件
  • 配置运行设置
    在这里插入图片描述
  • 这样的配置,是无法使用gf命令,gf run main.go运行的项目,当修改go文件时,会实时更新

https://github.com/gogf/gf-cli

  • 安装命令:go install github.com/gogf/gf-cli/v2/gf@master
  • 安装完成后,重启goland,输入gf -v,测试是否成功
  • 增加一个启动配置
    在这里插入图片描述
  • 这样,就可以在goland里使用gf命令了

四、结构预览

在这里插入图片描述

1. internal

1.1 cmd.go

main.go进入后,到cmd.go

1.2 consts

存放常量

1.3 controller

控制器

1.4 dao

数据访问层

1.5 logic

数据层-具体实现

1.6 model

定义实体类

1.7 service

数据接口层

2. mainifest

2.1 config.yaml

配置端口,地址等

2.2 deploy

部署文件

2.3 resource

静态资源,前后端分离时,用不到

2.4 template

模板语言

3. utility

工具函数


五、路由函数绑定

https://www.bilibili.com/video/BV1Uu4y1u7kX/?p=4&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 注释了案例的Group做法
  • 采用s.BindHandler(“路由”, 函数)的方式
    在这里插入图片描述
  • s.BindHandler可以使用函数,也可以使用对象的方法来绑定
    在这里插入图片描述
    定义了一个Hello的类,Sayhello是类的一个方法
    NewHello是一个返回Hello对象的方法
    然后在cmd里创建对象,绑定路由
    在这里插入图片描述
  • 修改请求类型
    在这里插入图片描述

六、路由绑定对象

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=5&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • s.BindObject(“/user”, user.New())
    建立一个路由对象,绑定所有的方法,例如,/user/add
    在这里插入图片描述
  • s.BindObject(“/user”, user.New(), “Add,Get”)
    选择函数绑定,路由,/user/add
  • s.BindObjectMethod(“/user”, user.New(), “Add”)
    选择函数绑定,路由,/user
  • s.BindObjectRest(“/user”, user.New())
    以restful的方式绑定函数,路由对象里函数名需要是Get / Post / Put / Delete

七、路由分组

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=6&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 路由分组
    在这里插入图片描述
  • 嵌套分组
    在这里插入图片描述
  • 分组里面,单独注册GET、POST、ALL等方法
    在这里插入图片描述
  • 绑定多个控制器
    在这里插入图片描述

八、规范路由

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=7&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • Middleware中间件,实现按照规范json格式对Res进行返回,格式如下
    在这里插入图片描述
  • 规范路由的写法
    定义g.Meta,路由信息
    定义Res返回格式
    定义func (c *Controller) Add(ctx content.Context, req *AddReq) (res *AddRes, er error){}的函数
    在这里插入图片描述
  • 返回自定义的页面数据,比如页面打印Hello
    在这里插入图片描述
  • api文件夹
    需要把Req与Res的结构体放在api文件夹里

九、GET接受参数

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=8&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 通过GetQuery来获取get请求?name=***返回的内容
    在这里插入图片描述
  • 通过GetQueryMap来获取值
    在这里插入图片描述

十、非GET接受参数

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=8&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • Post表达提交获取
    在这里插入图片描述
  • 以结构体的形式,获取
    在这里插入图片描述

十一、动态路由参数

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=10&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 动态路由定义
    在这里插入图片描述
  • 动态路由参数获取
    在这里插入图片描述
  • 使用GetRooterMap,获取全部路由参数
  • 动态路由是有精准匹配、模糊匹配等,参考官方文档的Web服务开发,路由管理

十二、所有请求参数获取

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=11&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • GetRequest,获取所有参数
  • 简写 Get / GetMap

十三、API参数

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=12&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 在Req请求结构体里,加入要请求的字段
    在这里插入图片描述
  • 请求参数里,就可以获取到定义的参数了
    在这里插入图片描述
  • param对应设置,简写p
    在这里插入图片描述
  • 设置默认值,default,简写d
    在这里插入图片描述

十四、响应输出

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=13&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • r.Response
    在这里插入图片描述
  • 所有的文本输出
    在这里插入图片描述

十五、API响应输出

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=14&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 输出json
    在这里插入图片描述
  • 通过res返回标准格式
    在这里插入图片描述
    返回
    在这里插入图片描述
  • 返回json变成小写
    在这里插入图片描述
  • error的简单用法,会让code和message都变化
    在这里插入图片描述

十六、数据库准备工作

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=15&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 数据库的配置config.yaml
    在这里插入图片描述
  • 其他类型数据库,可查看官方文档,数据库ORM
  • 简化写法
    在这里插入图片描述
  • 安装数据库组件
    在这里插入图片描述
  • 简单的使用
    在这里插入图片描述
  • 安装包后,可以执行下go mod tidy

十七、查询一条数据

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=16&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6
在这里插入图片描述

  • 建立一个Model
  • md.One()查询一条数据
  • 输出book

十八、查询所有数据

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=17&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • md.All(),输出全部的数据(切片格式)
    在这里插入图片描述
  • 获得一个数据
    在这里插入图片描述
  • 设置字段
    在这里插入图片描述
    在这里插入图片描述
  • FieldsEx,排斥字段
    在这里插入图片描述
  • Value,查询一条数据的一个字段
    在这里插入图片描述
  • Array,查询一个字段的一列数据
    在这里插入图片描述
  • 取最小,最大,平均值
    在这里插入图片描述
    这样写,一个md绑多个处理,会重叠,需要调整成多个model
    在这里插入图片描述
  • count
    在这里插入图片描述

十九、查询条件

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=19&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • Where
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 可以多条Where,链式结构
  • WhereIn
    在这里插入图片描述
  • Where系列函数,还有类同的WhereOr系列
    在这里插入图片描述

二十、排序与分组

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=20&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 排序,Order / OrderAsc / OrderDesc
    在这里插入图片描述
    在这里插入图片描述
  • 分组 Group
    在这里插入图片描述

二十一、分页

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=21&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • Limit(3),Limit(3,4) 从3开始,查4条
    在这里插入图片描述
  • Page(1, 3),第1页,每页3条
    在这里插入图片描述

二十二、分查询结果转结构体

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=22&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 返回结构体
    在这里插入图片描述
  • 用指针类型,搜不到,放回null,如果非指针,返回错误
  • 结构体的字段若和数据库字段不对应,可以使用orm来声明
    在这里插入图片描述
  • 查询多条数据
    在这里插入图片描述

二十三、数据插入

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=23&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • Data().Insert() 实现插入
    在这里插入图片描述
    result返回,Affected,影响行数
    在这里插入图片描述

  • 简洁的写法
    在这里插入图片描述

  • Replace(),如果数据冲突了,会用新的修改旧的
    在这里插入图片描述

  • Save(),效果与Replace相识

  • 采用结构体插入
    在这里插入图片描述

  • 插入多条数据,用g.List + g.Map
    在这里插入图片描述

  • 插入多条数据,用g.Array + 结构体

  • 用InsertAndGetId,插入后返回ID


二十四、数据更新

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=24&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • Update,需要用Where,确定更新的条件,用g.Map设置2个更新条件
    在这里插入图片描述
  • 简洁方法,Update(data)
  • Increment,增加;Decrement,减少
    在这里插入图片描述

二十五、数据删除

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=25&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • Delete
    在这里插入图片描述

二十六、时间维护与软删除

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=26&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 增加created_at,updated_at,deleted_at 3个数据表字段
    在这里插入图片描述
  • 添加这些字段后,在插入时会自动添加时间;删除只是软删除,做标记;查询的时候,是查不到对应的数据
  • 通过配置,修改3个at字段名称
    在这里插入图片描述

二十七、事务

https://www.bilibili.com/video/BV1Uu4y1u7kX/?p=27&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 开启事务Begin(req.Context()),并提交事务tx.Commit(),或回滚事务Rollback()
    在这里插入图片描述
  • 使用Transaction来完成事务
    在这里插入图片描述

二十八、执行SQL

https://www.bilibili.com/video/BV1Uu4y1u7kX/?p=27&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • Sql语句写法
    在这里插入图片描述
  • 用Exec执行插入
    在这里插入图片描述
  • 用Sql操作,at字段是无效的

二十九、DAO代码生成

https://www.bilibili.com/video/BV1Uu4y1u7kX/?p=29&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 需要配置hack / config.yaml,为数据库自动生成代码
    在这里插入图片描述
    可以进开发工具/代码生成-gen/数据规范-gen dao来看参数说明
    tables不写表示全部表需要生成,tablesEx表示排除哪些不写

  • 在命令行输入gf gen dao,会自动生成代码;或输入make dao


三十、DAO基本使用

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=30&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 用Dao来操作,与model操作的差别
    在这里插入图片描述
  • 如果不赋值md,则只会执行最后一个,前一个的处理没有加进去

三十一、空值处理

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=31&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 错误情况,会出来一个id为0的错误记录
    在这里插入图片描述
  • 用OmitEmpty来排除空值
    在这里插入图片描述
  • 用do来做更新,更加简单
    在这里插入图片描述

三十二、关联查询一对一

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=32&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 可以使用连接查询 LeftJoin等系列,但最合适是用关联写法
  • 修改entity/emp.go
    在这里插入图片描述
  • 关联写法 With
    在这里插入图片描述
  • 多个关联的写法
    在这里插入图片描述

三十三、关联查询一对多

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=33&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 结构体设置
    在这里插入图片描述
  • 控制器写法
    在这里插入图片描述
  • 可以多级关联,但要避免嵌套死循环
    在这里插入图片描述
  • 在关联中,选择特定的字段,定义一个需要字段的结构体,并设置好orm table
    在这里插入图片描述

三十四、service与logic目录使用

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=34&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

1. service
  • 4步定义service
    在这里插入图片描述
    在这里插入图片描述
  • service里直接写文件即可
2. logic
  • 建立一个文件夹,并建立一个book.go来实现逻辑
    在这里插入图片描述
    写一个init()方法实现注册,实现接口,利用开发工具,可以自动生成实现函数接口
  • 查询列表数据的logic
    在这里插入图片描述
  • controller使用
    在这里插入图片描述
  • 在logic目录下,新建一个logic.go的文件,增加import
    在这里插入图片描述
  • 把logic导入到main.go里面

三十五、模板输入

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=35&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • WriteTplContent(html, g.Map{})
    在这里插入图片描述
  • 把模板内容独立在一个文件中,更加清晰,还可以实现热更新
    在这里插入图片描述

三十六、模板条件判断与循环

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=36&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • tml 判断
    在这里插入图片描述
  • 比较的写法
    在这里插入图片描述
  • if的and写法
    在这里插入图片描述
  • 循环的写法
    在这里插入图片描述
    在这里插入图片描述
  • 结构体也可以绑定
    在这里插入图片描述
    在这里插入图片描述

三十七、模板其他一些内容

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=37&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 设置静态路径 manifest / config.yaml
    在这里插入图片描述
    在这里插入图片描述
  • 循环一个表格
    在这里插入图片描述

三十八、文件上传

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=38&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 获取提交文件
    在这里插入图片描述
  • 保存文件
    在这里插入图片描述
  • 多文件上传
    在这里插入图片描述
  • 解除上传大小限制
    在这里插入图片描述

三十九、文件下载

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=39&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 文件下载
    在这里插入图片描述

  • ServeFile文件是浏览器可显示的,就直接显示,不能显示的,调用下载功能

  • 直接下载
    在这里插入图片描述


四十、Cookie与Session

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=40&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6
在这里插入图片描述

  • 更复杂的Cookie设置
    在这里插入图片描述

四十一、数据校验

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=41&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 用结构体设置验证,必填
    在这里插入图片描述
  • 提示信息写法
    在这里插入图片描述
  • 规整可以看,核心组件 / 数据校验 / 校验规则
  • 多条验证规则
    在这里插入图片描述
  • 提示信息写法
    在这里插入图片描述

四十二、时间与随机工具

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=42&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 时间
    在这里插入图片描述
    在这里插入图片描述
  • 随机数
    在这里插入图片描述
  • uuid
    在这里插入图片描述

四十三、项目示例

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=43&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • demo-user

https://github.com/gogf/gf-demo-user

  • config/sql/create.sql 生成数据表

  • 配置config.yaml,数据库连接

  • 先要注释下登录验证代码
    在这里插入图片描述

  • 用sgin-up接口,注册一个账号

  • 用sgin-in接口,登录帐号

  • 用user/profile,测试下接口

  • focus-single

https://github.com/gogf/focus-single

  • 可以学习

四十四、中间件

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=44&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 中间件,cmd.go
    在这里插入图片描述
  • 中间件的实现
    在这里插入图片描述
  • 在Next()的前面,前置中间件,Next为路由放行
  • 在Next()之后,为后置中间件,先接收,再对接收的进行处理

四十五、接口文档

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=45&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • 接口文档,是根据api的信息生成的。
    在这里插入图片描述
    dc为描述
  • api是通过api.json来返回的接口信息
  • 自定义UI,在官方下载自定义的ui界面
  • cmd.go写中间件
    在这里插入图片描述
  • 出现新的api ui界面
    在这里插入图片描述

四十六、构建打包

https://www.bilibili.com/video/BV1Uu4y1u7kX?p=46&spm_id_from=pageDriver&vd_source=707ec8983cc32e6e065d5496a7f79ee6

  • hack/config.yaml
    在这里插入图片描述
  • 在win上直接生成linux,拷贝到linux就可以直接执行
  • packSrc,打包的静态资源,静态打包进去后,不用重新拷贝
  • 打包后,生成3个平台的文件
  • 打包命令:gf build;或者gf build [导出名称]

原文地址:https://blog.csdn.net/qq_17523181/article/details/142786603

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!