go语言后端框架之简单探索
文章目录
- 前置教程
- 数据库对象关系映射--gorm
- 1. 安装必要库
- 2. 定义orm对象,生成数据表结构
- 路由定义及处理
- 1. 集中管理路由
- 2. 编写路由绑定的处理函数
- 3. 删 操作
- 4. 查 (包括分页,模糊搜索,倒序)
- 中间件(middleware)
- 1. 自定义响应体
- 2. 鉴权中间件
- 项目热更新启动
- 杂谈--新手探索
前置教程
- 基础语法:https://www.runoob.com/go/go-concurrent.html
- cgo相关:https://www.cntofu.com/book/73/ch6-web/ch6-01-introduction.md
- web开发简单实践-gin框架: https://www.chaindesk.cn/witbook/19/330
- go-gin-admin, 一个star破万的后端管理系统 : https://github.com/flipped-aurora/gin-vue-admin
- 官方英文doc: https://golang.google.cn/doc/
数据库对象关系映射–gorm
1. 安装必要库
go get -u gorm.io/driver/sqlite
go get -u gorm.io/gorm
go get gorm.io/driver/mysql
2. 定义orm对象,生成数据表结构
如下生成article的一张表 (models/articles)
package modelsimport ("gorm.io/gorm"
)
// 数据库表结构
type Article struct {gorm.Model // 会引入4个字段(ID,创建于,修改于,删除于),删除为软删除Id uint `gorm:"primary_key"`Title stringAuthor stringCategory string //demo就这么搞了,应该关联另一个类别表Content string
}
// 数据库访问方法(比如增删改查CRUD)
// ...more
- 初始化数据表
service/init.go
func initDB(){//1. sqlitedb, err = gorm.Open(sqlite.Open("database/test.db"), &gorm.Config{})//2. 连接Mysql数据库//db, err = gorm.Open(mysql.Open(// "root:pass@tcp(127.0.0.1:3306)/gincms?charset=utf8mb4&parseTime=True&loc=Local"),// &gorm.Config{}) if err != nil {panic("failed to connect database")}// Migrate the schemadb.AutoMigrate(&Article{})// 插入内容// db.Create(&Article{Title: "测试标题1", Author: "作者1", Content: "1000"})// db.Create(&Article{Title: "测试标题2", Author: "作者2", Content: "3500"})}
路由定义及处理
1. 集中管理路由
routers/router.go
func InitRouters() *gin.Engine {router := gin.Default()router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))// 路由分组r:= router.Group("/api")r.GET("/", withMain)// 文章crudr.GET("/article", handlers.GetArticle)r.DELETE("/article", handlers.DeleteArticle)r.POST("/article", handlers.AddArticle)r.PUT("/article", handlers.EditArticle)return router
}
2. 编写路由绑定的处理函数
func withMain(c *gin.Context) {c.JSON(200, gin.H{"main": "this is a main page"})
}
...more
3. 删 操作
IN package handles
// @Summary 删除文章
// @Tags 文章
// @Produce json
// @Param id query string true "id"
// @Success 200 {string} json "{"code":200,"data":[],"message":"ok"}"
// @Router /api/article [delete]
func DeleteArticle(context *gin.Context) {id := context.DefaultQuery("id", "null")statusOK,_ := models.DeleteArticleById(id)context.Set("result",If(statusOK,"成功","失败"))
}
IN package models:
func DeleteArticleById(id string) (bool, error) {err := db.Where("id = ?", id).Delete(&Article{}).Errorif err != nil && err != gorm.ErrRecordNotFound {return false, err}return true, nil
}
4. 查 (包括分页,模糊搜索,倒序)
中间件(middleware)
1. 自定义响应体
2. 鉴权中间件
项目热更新启动
类似于前端webpack保存时的热更新,go也有一大堆热重载工具
- fresh : 速度不错,几秒就ok
- gin run main.go : 有一说一,我改一个文件它就需要15s重新加载,慢。
- 打包:直接 go build main.go
- 交叉编译, 打包一个linux可用的x86_64的二进制包
set GOOS=linux
set GOARCH=amd64
go build main.go
杂谈–新手探索
- 关于go,相同package的不同文件中的方法可以互相直接调用。
- 参考了该项目routers和service的划分:https://github.com/eddycjy/go-gin-example
- .gitkeep可以让git工具追踪一个空文件夹
- git branch --orphan xxx 可以创建一个清空历史提交的分支
- swagger是一个不错的工具, 方便开发阶段-前后端联调, 虽然在路由处理函数前需要写额外的注释,但是这是很值得的。
- 关于函数或者变量的导出:在 Go 中,只要变量或函数的首字母大写就可以了。
- 关于x86_64和amd64,经历长久的磨合期,其实现在基本一致了。
- golang for循环
for key, value := range oldMap {newMap[key] = value
}
- go全局变量定义
var db *gorm.DB
func xxx(){
db = ........
// 用成db:= ......,,,就gerp了,还是不太熟悉
}
- 含有cgo模块,比如go-sqlite3时,无法在windows上编译linux可执行文件,话说没有go原生实现的文件版小型数据库么。
go语言后端框架之简单探索相关推荐
- Dart语言后端框架-DartX
Dart语言后端框架-DartX dart版的express httpServer服务框架 -dartX. 功能未完善,请勿在生产环境中使用 灵感来源express,koa2,laravel 项目地址 ...
- layui后端框架的简单使用
layui后端框架的基本使用 <!DOCTYPE html> <html> <head><meta charset="utf-8"> ...
- 02-Java后端框架-SSM简单总结
目录 一.Spring Bean的生命周期 二.SpringMVC的执行流程 三.MyBatis 3.1一级缓存,二级缓存 3.2.MyBatis执行流程 3.3 MyBatis的使用 一.Sprin ...
- 搭建一个简单springboot后端框架
前言 框架知识是每个程序员都应该或多或少都要有所了解,作为后端开发更是以后进阶架构师必备的知识储备:以此为出发点,我们可以从搭建一个简单的后端框架开始,了解相关的技术点和搭建思路. 我们可以从创建项目 ...
- 闲鱼研发框架应用和探索
简介:Flutter是开源的UI工具包,其能够帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面和嵌入式平台.在AliFlutter 系列第二场直播中,阿里巴巴闲鱼无线技术专家梁治 ...
- 后端框架flask学习小记
1. 写在前面 最近在和几个伙伴尝试搭建一个新闻推荐系统, 算是一个推荐算法的实战项目, 里面涉及到了前后端交互, 该项目里面,使用了Flask作为后台框架, 为了理清楚整个系统的交互,所以就快速参考 ...
- 干货分享:六个知名的Go语言web框架
框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了.成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应 ...
- 框架 go_Colly - 优雅极速的Go语言爬虫框架
写爬虫,Python 是目前的第一选择,但总觉得 Python 太慢了,而且缺乏静态类型.能不能换 Go 语言来试试呢?Colly,这个既优雅又快速的 Go 语言爬虫框架,是你的不二选择. 爬虫框架 ...
- Go 语言 Gin 框架实战项目笔记
Go 语言 Gin 框架实战 后端 Goland 操作 创建项目 运行项目 数据库操作 jwt.Response 配置管理 获取请求参数 数据验证 使用 UUID 前端 环境搭建 创建项目 ESLin ...
最新文章
- java中有关覆写的总结
- 实验四:汇编代码调用系统调用的工作过程
- swoole必须和PHP使用吗,php有必要使用swoole吗
- ZABBIX安装官方指南
- Java设计模式(16)中介模式(Mediator模式)
- 最新android版本奥利奥,最新Android 8.1即将来临,你想吃奥利奥了吗?
- select选择后生成html,Javascript - 从select中添加选择列表
- 使用Recast.AI创建具有人工智能的聊天机器人
- haproxy服务启动命令_安装haproxy和haproxy命令
- Django二次开发对接FastDFS
- VIEW SERVER STATE permission was denied on object 'server', database 'master'
- php商品显示循环,php – 如何在循环中显示GROUP BY数据
- 解决Spring对静态变量无法注入问题(转)
- 支付弹出php,PHP微信公众号支付弹出“NaN:undefined”解决方法
- 解决django传递URL报错Specifying a namespace in include() without providing an app_name is not supported.
- 锁定计算机好在下游戏吗,用windows7系统锁定计算机防止孩子沉迷游戏
- 如何让C盘可用空间变大
- vm虚拟服务器无法启动,win10升级后vm虚拟主机无法启动的解决办法
- 1024程序员节,以梦为马,不负韶华,我们来聊聊IT的发展以及个人感受吧!
- 虚幻引擎学习笔记——Month1 Week3