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

做网站宣传有用吗网店运营推广具体内容

做网站宣传有用吗,网店运营推广具体内容,网页设计兼职,wordpress多站共享授权码config #xff1a;敏感的配置一般都是在配置中心配置#xff0c;比如consul或者阿波罗上面controller #xff1a;写一些handler的#xff0c;拿到参数要去调用service层的逻辑。#xff08;只负责接受参数#xff0c;怎么绑定参数#xff0c;要去调用哪个service的敏感的配置一般都是在配置中心配置比如consul或者阿波罗上面controller 写一些handler的拿到参数要去调用service层的逻辑。只负责接受参数怎么绑定参数要去调用哪个service的handler的一个入口serviceservice层才是正真的业务处理层。调用dao层的增删改查操作dao只关心数据库的一个操作其实你有数据库和es都在dao层db负责数据库中间件层的初始化middleware存放gin的中间件在注册路由的时候将中间件引入进来 go常用项目结构  dao层只关心数据库的操作db层只做Mysql层的初始化。model去定义表结构定义中间表多对多的结构体。  中间件有个token的验证。 controller层先去找路由这个项目有多少的接口router.go每个接口到哪些对应的handler。 controller层接收完参数之后再看调用到哪个serviceservice再去干了什么增删改查操作。 数据库增删改查就去dao层查看。 这一层一层非常的分明。上面可以理解为日常开发的目录结构最佳实践。 创建数据库 mysql create database books charset utf8; 图书管理服务  用户服务登录注册 书籍服务对书籍的增删改查的操作 主要有两个维度一个是书籍维度一个是用户维度。用户维度要去写两个功能一个功能是登入一个功能是注册。 注册就是数据库插入一条数据。登入就是一个校验。配合token中间件去做一个校验。 在新增书籍的时候要去关联用户这本书属于谁书籍的增删改查都需要关联这个用户。这里就涉及到1对多的关系。 开发的时候是从最底层开始往上开发。第一个先去定义数据库的model层。 model层 定义数据库结构 binding标签表示是必填项token是可以为空的因为一开始注册的时候token的为空。只有登入的时候才有token。 user.go package modeltype User struct {ID int64 gorm:primaryKey json:idUserName string gorm:not null json:username binding:requiredPassWord string gorm:not null json:password binding:requiredToken string json:token }func (*User) TableName() string {return user } book.go package modeltype Book struct {ID int64 gorm:primaryKey json:idName string gorm:not null json:name binding:requiredDesc string json:descUsers []User gorm:many2many:book_users }func (*Book) TableName() string {return book } 多对多关系可以在user这层定义也行在book这一层定义也可以。这个主要看你的一个实际使用的场景这里在book模型里面去定义就行了。 还需要去定义一个中间表的模型user_m2m_book.go package modeltype BookUser struct {UserID int64 gorm:primaryKeyBookID int64 gorm:primaryKey }这里不需要自定义表名它只有一个主键也没有其他属性了。它也是永了外键也是使用了那两个模型的主键。 DB层 模型定义好之后去做数据库的初始化这里需要预留因为可能不仅仅只有MySQL的初始化。 这样赋值到一个全局变量之后使用mysql.DB就可以在任何地方去使用了。  package mysqlimport (book/modelfmtgorm.io/driver/mysqlgorm.io/gorm )// DB 要将DB实例放到全局变量,这样就可以使用mysql.DB在任何地方去使用了. var DB *gorm.DBfunc InitMysql() {dsn : root:7PXjAkY!nlRtcp(192.168.11.128:3306)/books?charsetutf8mb4parseTimeTruelocLocaldb, err : gorm.Open(mysql.Open(dsn), gorm.Config{})//这个地方Log和panic都是可以的if err ! nil {fmt.Println(err)}DB dberr DB.AutoMigrate(model.Book{}, model.User{}, model.BookUser{})if err ! nil {fmt.Println(err)} } DAO层 初始化好之后在dao层开始写dao层的操作就是数据库的增删改查 package daoimport (book/db/mysqlbook/modelerrorsfmtgithub.com/wonderivan/loggergorm.io/gorm )//定义user结构体以及User变量能够直接跨包调用user下面的方法 //只需要一次初始化即可,不用每次调用的都是先初始化var User usertype user struct { }// Add 新增 用于注册 func (*user) Add(user *model.User) error {if tx : mysql.DB.Create(user); tx.Error ! nil {//打印错误提示logger.Error(fmt.Sprintf(添加User失败,错误信息:%s, tx.Error))return errors.New(fmt.Sprintf(添加User失败,错误信息:%s, tx.Error))}return nil }// Has 查询 基于name 用于新增 func (*user) Has(name string) (*model.User, bool, error) {//初始化要申请内存不然会报错data : model.User{}tx : mysql.DB.Where(username ?, name).Find(data)//如果记录没有查询到报错是从tx.error里面拿到的相当于tx.Error gorm.ErrRecordNotFoundif errors.Is(tx.Error, gorm.ErrRecordNotFound) {return nil, false, nil}//等会去调用的时候不会先去判断有没有要先去判断error有error就是真正的错误没有判断是不是falseif tx.Error ! nil {logger.Error(fmt.Sprintf(查询用户失败,错误信息:%s, tx.Error))return nil, false, errors.New(fmt.Sprintf(查询用户失败,错误信息:%s, tx.Error))}return data, true, nil }// GetByToken 基于token查询用于中间件token校验 func (*user) GetByToken(token string) (*model.User, bool, error) {//初始化要申请内存不然会报错data : model.User{}tx : mysql.DB.Where(token ?, token).Find(data)//如果记录没有查询到报错是从tx.error里面拿到的相当于tx.Error gorm.ErrRecordNotFoundif errors.Is(tx.Error, gorm.ErrRecordNotFound) {return nil, false, nil}if tx.Error ! nil {logger.Error(fmt.Sprintf(查询用户失败%s, tx.Error))return nil, false, errors.New(fmt.Sprintf(查询用户失败%v/n, tx.Error))}return data, true, nil }// UPDateToken 更新token,这里其实就是找到user的条件去更新就行了 // 第一个参数可以是id也可以是用户名如果用户名唯一只要保证找到指定用户即可 // 除了查询的操作以外增删改只需要返回一个error即可判断操作有没有成功 func (*user) UPDateToken(user *model.User, token string) error {tx : mysql.DB.Model(user).Where(username ? and password ?, user.UserName, user.PassWord).Update(token, token)if tx.Error ! nil {logger.Error(fmt.Sprintf(更新user token失败,错误信息:%s, tx.Error))return errors.New(fmt.Sprintf(更新user token失败,错误信息:%s, tx.Error))}return nil } service层 和dao层一样都定义了相同的结构体不同的包使用相同的结构体变量但是点出来的方法都是不同的。
http://www.huolong8.cn/news/409715/

相关文章:

  • 宝安商城网站建设网站用户推广
  • 门户网站简称德阳建设机械网站
  • 公司建设网站费用自动生成前端页面工具
  • 做网站要用到哪些架包开发工具设置控件格式
  • 桐城住房建设网站wordpress做淘宝客
  • 设计上海网站wordpress博客订单系统
  • 网站效果用什么软件做企业信息公示网查询官网
  • 网站规划文字说明深圳网站建设公司top20
  • 济南建手机网站哪家好网络推广服务公司外包
  • 合肥网站制作公司电话陕西省建设网三类人员成绩公示
  • 织梦图片网站模板ps免费模板素材网站
  • 自己做培训网站佛山网站设计
  • 佛山新网站制作公司淘宝网站可信度状况及建设策略
  • 长沙网站设计公司排名西安网站制作费用
  • 用wordpress建站效果怎么样wordpress随机图片
  • 八里庄网站建设中国行业客户资源网
  • 外贸网站如何推广WordPress离线编写
  • 网站建设费用入账淘宝放单网站怎么做的
  • 站长之家app成都网站建设新线加
  • 网站建设方案撰写网站后台构建
  • 阿里云网站建设最后什么样子哪个公司的app开发公司
  • 钓鱼网站制作教程视频拍摄宣传片收费标准
  • vs做网站mvc网站开发长期合作
  • 龙象建设集团有限公司网站山东做网站建设公司哪家好
  • 网站登录界面设计怎样360网站做推广
  • 品牌网站建设 磐石网络官方网站资兴市网站建设服务商
  • 如何衡量网站的价值什么是网络营销?网络营销的目的有哪些内容?
  • 建立企业网站的形式有哪几种17一起做网站童装
  • 做面包的网站网站首页结构布局
  • 网站信息化建设报送可以免费做宣传的网站