当前位置: 首页 > news >正文

如何给国外网站做seowordpress 标签前缀

如何给国外网站做seo,wordpress 标签前缀,网站进行规划与设计,如何做好企业推广目录 项目介绍 简介 技术 项目结构 项目分析 总结 项目介绍 简介 项目地址#xff1a;knoci/list: 基于Gin的待办清单小项目 (github.com) 一个仿照github/Q1mi/bubble 做的一个gin框架练习 技术 gin 框架gorm 操作PostgreSQLini 配置文件 项目结构 list ├── R…目录 项目介绍 简介 技术 项目结构 项目分析 总结  项目介绍 简介 项目地址knoci/list: 基于Gin的待办清单小项目 (github.com) 一个仿照github/Q1mi/bubble 做的一个gin框架练习 技术 gin 框架gorm 操作PostgreSQLini 配置文件 项目结构 list ├── README.md ├── config │ └── config.ini ├── controller │ └── controller.go ├── dao │ └── postgresql.go ├── go.mod ├── go.sum ├── main.go ├── models │ └── todo.go ├── routers │ └── routers.go ├── static │ ├── css │ │ ├── app.8eeeaf31.css │ │ └── chunk-vendors.57db8905.css │ ├── fonts │ │ ├── element-icons.535877f5.woff │ │ └── element-icons.732389de.ttf │ └── js │ ├── app.007f9690.js │ └── chunk-vendors.ddcb6f91.js └── templates├── favicon.ico└── index.html 项目分析 项目中有configcontrollersdaomodelsroutersstatictemplate这7个文件夹。 config保存ini文件配置连接数据库的参数(Port,User,Password...)controllers保存控制函数实现器功能处理web响应dao连接数据库models是各种数据结构模板定义routers负责路由分组和路由处理static存储静态资源template是前端模板 接下来我们从mian.go开始逐步分析整个项目的运行。 package mainimport (list/daolist/modelslist/routers//_ gorm.io/driver/mysql_ gorm.io/driver/postgres )func main() {//连接数据库dao.Connect()//模型绑定dao.DB.AutoMigrate(models.Todo{})//启动routerrouters.SetupRouter() }在main.go中我们导入了同文件夹下的daomodelsrouters随后运行第一个函数 dao.Connect()接下来我们进入dao来看看 dao.Connect() 函数实现了什么功能。 package daoimport (fmtgopkg.in/ini.v1//gorm.io/driver/mysqlgorm.io/driver/postgresgorm.io/gorm )var (DB *gorm.DB )type MysqlConfig struct {User string ini:userPassword string ini:passwordHost string ini:hostPort string ini:portDBname string ini:db }func LoadConfig() *MysqlConfig {//development_通过结构体映射参数c : new(MysqlConfig)ini.MapTo(c, config/config.ini)fmt.Println(c)return c }func Connect() {c : LoadConfig()dsn : fmt.Sprintf(host%s user%s password%s dbname%s port%s, c.Host, c.User, c.Password, c.DBname, c.Port)/* mysqldsn : fmt.Sprintf(%s:%stcp(%s:%s)/%s?charsetutf8mb4parseTimeTruelocLocal,c.User, c.Password, c.Host, c.Port, c.DBname)dsn : root:root1234tcp(127.0.0.1:13306)/bubble?charsetutf8mb4parseTimeTruelocLocal*/var err errorDB, err gorm.Open(postgres.Open(dsn), gorm.Config{}) // connect// mysql DB, err gorm.Open(mysql.Open(dsn), gorm.Config{})if err ! nil {panic(err.Error())}fmt.Print(连接数据库成功\n) } 在postgresql.go中导入了GORMPG驱动ini包自定义了结构体Mysqlconfig和一个 导包全局可访问的 gorm.DB类型的指针DB封装了一个函数 LoadConfig() 通过ini.MapTo(c, config/config.ini) 来接收配置文件。 在Connect函数中调用LoadConfig()获得配置用Sprintf()把配置复制到dsn,然后通过gorm.Open方法连接到我们的数据库。 dao.Connect()完成后我们继续回到main.go用dao包内变量DB的内置方法 dao.DB.AutoMigrate(models.Todo{}) 实现了模型绑定实际上就是按照models.Todo结构体在数据库中创建了一张表。 package modelstype Todo struct {ID int json:idTitle string json:titleStatus bool json:status } Todo表中每个待办事项有IDTitleStatus并且有相应JOSN的tag。其中ID是用来标识事项的自增唯一值Title是事务名Status用0和1表示未完成和完成。 回到main.go最后调用了routers.SetupRouter()这是在本地routers包routers.go里的函数。在SetupRouter中使用gin.Default()注册默认路由r然后用r.Static()导入./static目录下静态文件指定为static接着用r.LoadHTMLGlob()导入当前路径template/*的模板。 接着就是路由处理指定了对/的GET请求回应controllers.ShowIndex函数用r.Group()定义了路由组v1Group。 路由组中指定了对todo的POST请求回应controllers.CreateTodo函数对/todo的GET请求回应controllers.RetrieveTodo函数对/todo/:id的PUT请求回应controllers.UpdateTodo函数对/todo/:id的DELETE请求回应controllers.DeleteTodo函数。 最后用r.Run(:9090)在9090端口上监听并运行。 package routersimport (github.com/gin-gonic/ginlist/controllers )func SetupRouter() {r : gin.Default()r.Static(/static, static)r.LoadHTMLGlob(template/*)r.GET(/, controllers.ShowIndex)v1Group : r.Group(v1){//添加v1Group.POST(todo, controllers.CreateTodo)//查看v1Group.GET(/todo, controllers.RetrieveTodo)//修改v1Group.PUT(/todo/:id, controllers.UpdateTodo)//删除v1Group.DELETE(/todo/:id, controllers.DeleteTodo)}r.Run(:9090)} 接下来看看controller中的各个函数的功能首先是ShowIndex负责返回状态码200展示index.html。 func ShowIndex(c *gin.Context) {c.HTML(http.StatusOK, index.html, nil) } CreateTodo 用来创建一个待办事项。在接收到传来的数据后定义一个models.Todo类型的todo结构体然后用 c.ShouldBind(todo) 自动的进行响应格式(这里是JSON)的参数绑定到todo然后通过 dao.DB.Create(todo) 把todo存入数据库DB以JSON格式失败返回报错成功返回todo。 func CreateTodo(c *gin.Context) {//get datavar todo models.Todoc.ShouldBind(todo)//add into databaseerr : dao.DB.Create(todo).Error//returnif err ! nil {c.JSON(http.StatusBadRequest, gin.H{error: err.Error()})return} else {c.JSON(http.StatusOK, todo)}} RetrieveTodo 用来获取所有待办事项创建一个结构体数组todos用 dao.DB.Find(todos) 把所有的表数据给到todos以JSON格式失败返回报错成功返回todos。 func RetrieveTodo(c *gin.Context) {var todos []models.Todoif err : dao.DB.Find(todos).Error; err ! nil {c.JSON(http.StatusOK, gin.H{error: err.Error()})return} else {c.JSON(http.StatusOK, todos)} } UpdateTodo 用来更新指定的事项用 c.Params.GET(id) 获得要修改事项名为id的指定url定义todo结构体然后用 dao.DB.Where(id?, id).First(todo) 来查询数据库中第一个对应id的数据到todo然后 c.BindJSON(todo) 把方法请求体c以JSON绑定到todo最后 dao.DB.Save(todo) 来更新数据库。 func UpdateTodo(c *gin.Context) {id, ok : c.Params.Get(id)if !ok {c.JSON(http.StatusOK, gin.H{error: id invalid})return}var todo models.Todoif err : dao.DB.Where(id?, id).First(todo).Error; err ! nil {c.JSON(http.StatusOK, gin.H{error: err.Error()})return}c.BindJSON(todo) //修改if err : dao.DB.Save(todo).Error; err ! nil {c.JSON(http.StatusOK, gin.H{error: err.Error()})} else {c.JSON(http.StatusOK, todo)} } DeletTodo 用来删除一个待办事项还是通过 c.Params.GET(id) 获得要修改事项名为id的指定url用 dao.DB.Where(id?, id).Delete(models.Todo{}) 来删除数据库中对应id的数据因为这里不接收请求体没有定义局部变量结构体所以直接传入model.Todo{}指定表格式。 总结  这个项目是Gin和GORM的非常非常简单的小项目适合新手入门。
http://www.w-s-a.com/news/89625/

相关文章:

  • 电子商务网站和普通网站的区别正规网站建设多少费用
  • 郴州免费招聘网站前端好还是后端好
  • 织梦网站怎样做子域名20个中国风网站设计欣赏
  • wordpress网站搬简约创意logo图片大全
  • 叙述网站制作的流程石家庄58同城最新招聘信息
  • 南昌微信网站建设东莞网站优化软件
  • 爱站数据官网纯静态网站挂马
  • 网站建设公司未来方向3d设计网站
  • 建设部网站 干部学院 一级注册建筑师培训 2014年做网站开发的提成多少钱
  • 网上请人做软件的网站铝合金型材外发加工网
  • 手机网站建设万网山东省作风建设网站
  • 网站策划专员招聘50万县城做地方网站
  • 网站开发公司+重庆wordpress自定义搜索界面
  • 梅州南站学校官网
  • 网站变灰代码 所有浏览器企业邮箱域名怎么填写
  • 网站建设哪好旅行社网站模板
  • 网站开发发展存在的问题交换链接营销的经典案例
  • 烟台高端网站建设公司福田市网站建设推广
  • 做网站如何保证询盘数量智慧城市
  • 大连网站平台研发wordpress更改地址
  • 做标书要不要做网站南昌网站排名优化费用
  • 网站内容如何自动关联新浪微博万网域名信息
  • 网站出售网络推广服务费计入什么科目
  • 宁波咨询网站设计西安网站制作开发
  • 深圳市专注网站建设全网营销网络推广
  • 如何快速建设网站虚拟空间软件
  • 一个虚拟主机可以做几个网站免费软件下载中心
  • 美工培训网站中国建筑网官网手机版
  • 创建网站花钱吗谁能给个网址免费的
  • 宁波教育学会网站建设网站建设价格由什么决定