文章目录

  • 前置教程
  • 数据库对象关系映射--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
  1. 初始化数据表
    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

杂谈–新手探索

  1. 关于go,相同package的不同文件中的方法可以互相直接调用。
  2. 参考了该项目routers和service的划分:https://github.com/eddycjy/go-gin-example
  3. .gitkeep可以让git工具追踪一个空文件夹
  4. git branch --orphan xxx 可以创建一个清空历史提交的分支
  5. swagger是一个不错的工具, 方便开发阶段-前后端联调, 虽然在路由处理函数前需要写额外的注释,但是这是很值得的。
  6. 关于函数或者变量的导出:在 Go 中,只要变量或函数的首字母大写就可以了。
  7. 关于x86_64和amd64,经历长久的磨合期,其实现在基本一致了。
  8. golang for循环
for key, value := range oldMap {newMap[key] = value
}
  1. go全局变量定义
var db *gorm.DB
func xxx(){
db = ........
// 用成db:= ......,,,就gerp了,还是不太熟悉
}
  1. 含有cgo模块,比如go-sqlite3时,无法在windows上编译linux可执行文件,话说没有go原生实现的文件版小型数据库么。

go语言后端框架之简单探索相关推荐

  1. Dart语言后端框架-DartX

    Dart语言后端框架-DartX dart版的express httpServer服务框架 -dartX. 功能未完善,请勿在生产环境中使用 灵感来源express,koa2,laravel 项目地址 ...

  2. layui后端框架的简单使用

    layui后端框架的基本使用 <!DOCTYPE html> <html> <head><meta charset="utf-8"> ...

  3. 02-Java后端框架-SSM简单总结

    目录 一.Spring Bean的生命周期 二.SpringMVC的执行流程 三.MyBatis 3.1一级缓存,二级缓存 3.2.MyBatis执行流程 3.3 MyBatis的使用 一.Sprin ...

  4. 搭建一个简单springboot后端框架

    前言 框架知识是每个程序员都应该或多或少都要有所了解,作为后端开发更是以后进阶架构师必备的知识储备:以此为出发点,我们可以从搭建一个简单的后端框架开始,了解相关的技术点和搭建思路. 我们可以从创建项目 ...

  5. 闲鱼研发框架应用和探索

    简介:Flutter是开源的UI工具包,其能够帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面和嵌入式平台.在AliFlutter 系列第二场直播中,阿里巴巴闲鱼无线技术专家梁治 ...

  6. 后端框架flask学习小记

    1. 写在前面 最近在和几个伙伴尝试搭建一个新闻推荐系统, 算是一个推荐算法的实战项目, 里面涉及到了前后端交互, 该项目里面,使用了Flask作为后台框架, 为了理清楚整个系统的交互,所以就快速参考 ...

  7. 干货分享:六个知名的Go语言web框架

    框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了.成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应 ...

  8. 框架 go_Colly - 优雅极速的Go语言爬虫框架

    写爬虫,Python 是目前的第一选择,但总觉得 Python 太慢了,而且缺乏静态类型.能不能换 Go 语言来试试呢?Colly,这个既优雅又快速的 Go 语言爬虫框架,是你的不二选择. 爬虫框架 ...

  9. Go 语言 Gin 框架实战项目笔记

    Go 语言 Gin 框架实战 后端 Goland 操作 创建项目 运行项目 数据库操作 jwt.Response 配置管理 获取请求参数 数据验证 使用 UUID 前端 环境搭建 创建项目 ESLin ...

最新文章

  1. java中有关覆写的总结
  2. 实验四:汇编代码调用系统调用的工作过程
  3. swoole必须和PHP使用吗,php有必要使用swoole吗
  4. ZABBIX安装官方指南
  5. Java设计模式(16)中介模式(Mediator模式)
  6. 最新android版本奥利奥,最新Android 8.1即将来临,你想吃奥利奥了吗?
  7. select选择后生成html,Javascript - 从select中添加选择列表
  8. 使用Recast.AI创建具有人工智能的聊天机器人
  9. haproxy服务启动命令_安装haproxy和haproxy命令
  10. Django二次开发对接FastDFS
  11. VIEW SERVER STATE permission was denied on object 'server', database 'master'
  12. php商品显示循环,php – 如何在循环中显示GROUP BY数据
  13. 解决Spring对静态变量无法注入问题(转)
  14. 支付弹出php,PHP微信公众号支付弹出“NaN:undefined”解决方法
  15. 解决django传递URL报错Specifying a namespace in include() without providing an app_name is not supported.
  16. 锁定计算机好在下游戏吗,用windows7系统锁定计算机防止孩子沉迷游戏
  17. 如何让C盘可用空间变大
  18. vm虚拟服务器无法启动,win10升级后vm虚拟主机无法启动的解决办法
  19. 1024程序员节,以梦为马,不负韶华,我们来聊聊IT的发展以及个人感受吧!
  20. 虚幻引擎学习笔记——Month1 Week3

热门文章

  1. 创龙基于TI TMS320C6748定点/浮点DSP C674x开发板的BOOT SET启动选择开关、Micro SD卡接口
  2. python停车场车位短租系统django+vue项目源码介绍
  3. 我的飞信发展方案(二)
  4. ubuntu交叉编译移植paho-mqtt-c
  5. linux命令:grep常用语法
  6. 商业模式:收入、价值与过程
  7. 15.9 - 因果图法
  8. LSI SAS 3008 Web配置操作
  9. 查成绩2月21日,考研复试3月份!多个省份和大学公布考研成绩查询时间
  10. 阿里云服务器收费价格表及配置选择