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

福州做网站改版哪里比较好国家企业信用信息公示网查询系统

福州做网站改版哪里比较好,国家企业信用信息公示网查询系统,高端定制网站是什么,旅游网页制作教程写在前面 项目地址 个人认为GORM 指南这个网站是相比较之下最为清晰的框架介绍 但是它在环境搭建阶段对于初学者而言不是很友好#xff0c;尤其是使用mysql指令稍有不同#xff0c;以及更新的方法和依赖问题都是很让人头疼的#xff0c;而且这些报错并非逻辑上的#xf…写在前面 项目地址 个人认为GORM 指南这个网站是相比较之下最为清晰的框架介绍 但是它在环境搭建阶段对于初学者而言不是很友好尤其是使用mysql指令稍有不同以及更新的方法和依赖问题都是很让人头疼的而且这些报错并非逻辑上的往往是网络端口数据库创建等没有接触过的内容因此我建议可以在学习使用增删改查的操作时看框架教程配置环境使用以下的学习步骤 首先下载mysql以及三选一mysqlshell,navicat,dbreaver(个人感觉第二个的破解版手感是最丝滑的)对于初学一个东西我认为可视化是最好的帮助和激励 在创建和连接数据库的时候搜一下“Navicat使用快速入门教程”对于数据库连接不成功的情况往往是因为没有启动服务这个在任务管理器-服务-mysql90(或80)找到之后右键手动打开即可简单学一下建表增删改查都看一下也可以大概十几分钟就搞定 之后使用下面两个命令在项目中搭建gorm环境 go get -u gorm.io/gorm go get -u gorm.io/driver/mysql然后按照下面的文件结构去添加文件夹和文件即可由于版本的原因我直接上传所有新增文件并且以注释的形式去解释每部分的作用 文件及解析 dao.go package daoimport (Ranking/configRanking/pkg/loggergorm.io/driver/mysql // 引入 MySQL 驱动gorm.io/gorm // 引入 Gormtime )var (Db *gorm.DBerr error )func init() {// 使用 gorm.Open 打开 MySQL 数据库连接Db, err gorm.Open(mysql.Open(config.Mysqldb), gorm.Config{})if err ! nil {logger.Error(map[string]interface{}{mysql connect error: err.Error()})return // 连接失败提前返回}// 获取底层的 sql.DBsqlDB, err : Db.DB()if err ! nil {logger.Error(map[string]interface{}{get DB instance error: err.Error()})return // 获取 DB 实例失败提前返回}// 配置连接池参数sqlDB.SetMaxIdleConns(10) // 设置最大空闲连接数sqlDB.SetMaxOpenConns(100) // 设置最大打开连接数sqlDB.SetConnMaxLifetime(time.Hour) // 设置连接的最大可重用时长 }models包user.go package modelsimport Ranking/daotype User struct {Id intUsername string }func (User) TableName() string {return user }// GetUsersTest 根据用户ID获取用户信息 func GetUsersTest(id int) (User, error) {var user User//where在 SQL 中生成一个 WHERE 子句以便查找满足条件的记录,?是占位符//first方法用于查找单个记录如果找到则返回该记录否则返回错误err : dao.Db.Where(id ?, id).First(user).Errorreturn user, err }controllers-user.go重写一个方法 func (u UserController) GetUserInfo(c *gin.Context) {idStr : c.Param(id)name : c.Param(name)id, _ : strconv.Atoi(idStr)user, _ : models.GetUsersTest(id)ReturnSuccess(c, 0, name, user, 1)}路由(调用getuserinfo需要传入id) user.GET(/info/:id, controllers.UserController{}.GetUserInfo)最需要注意的就是db文件的配置 运行检查 数据库构建 id是创建的数据库里面的id键值主键 增删改查的实现 实现思路 #mermaid-svg-ArpBSl36IesLeDvQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ArpBSl36IesLeDvQ .error-icon{fill:#552222;}#mermaid-svg-ArpBSl36IesLeDvQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ArpBSl36IesLeDvQ .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-ArpBSl36IesLeDvQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ArpBSl36IesLeDvQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ArpBSl36IesLeDvQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ArpBSl36IesLeDvQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ArpBSl36IesLeDvQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ArpBSl36IesLeDvQ .marker.cross{stroke:#333333;}#mermaid-svg-ArpBSl36IesLeDvQ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ArpBSl36IesLeDvQ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ArpBSl36IesLeDvQ .cluster-label text{fill:#333;}#mermaid-svg-ArpBSl36IesLeDvQ .cluster-label span{color:#333;}#mermaid-svg-ArpBSl36IesLeDvQ .label text,#mermaid-svg-ArpBSl36IesLeDvQ span{fill:#333;color:#333;}#mermaid-svg-ArpBSl36IesLeDvQ .node rect,#mermaid-svg-ArpBSl36IesLeDvQ .node circle,#mermaid-svg-ArpBSl36IesLeDvQ .node ellipse,#mermaid-svg-ArpBSl36IesLeDvQ .node polygon,#mermaid-svg-ArpBSl36IesLeDvQ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ArpBSl36IesLeDvQ .node .label{text-align:center;}#mermaid-svg-ArpBSl36IesLeDvQ .node.clickable{cursor:pointer;}#mermaid-svg-ArpBSl36IesLeDvQ .arrowheadPath{fill:#333333;}#mermaid-svg-ArpBSl36IesLeDvQ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ArpBSl36IesLeDvQ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ArpBSl36IesLeDvQ .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-ArpBSl36IesLeDvQ .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-ArpBSl36IesLeDvQ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ArpBSl36IesLeDvQ .cluster text{fill:#333;}#mermaid-svg-ArpBSl36IesLeDvQ .cluster span{color:#333;}#mermaid-svg-ArpBSl36IesLeDvQ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ArpBSl36IesLeDvQ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} router.go创建路由 控制user.go创建函数 模块user.go创建方法 代码 可以参考项目地址 router.go package routerimport (Ranking/controllersRanking/pkg/loggergithub.com/gin-gonic/ginnet/http )// 路由 函数的名字要大写这样才可以被其他包访问 func Router() *gin.Engine {//创建一个路由的实例r : gin.Default()//日志r.Use(gin.LoggerWithConfig(logger.LoggerToFile()))r.Use(logger.Recover)//实现GET路由 获取r.GET(/hello, func(ctx *gin.Context) {ctx.String(http.StatusOK, hello world)})//创建这样一个组简化代码user : r.Group(/user){//查询单条数据user.GET(/info/:id, controllers.UserController{}.GetUserInfo)//查询列表数据user.POST(/list, controllers.UserController{}.GetList)//添加数据user.POST(/add, controllers.UserController{}.AddUser)//修改数据user.POST(/update, controllers.UserController{}.UpdateUser)//删除单个用户的数据user.POST(/delete, controllers.UserController{}.DeleteUser)//获取用户列表user.GET(/info/list, controllers.UserController{}.GetAllUsers)user.DELETE(/delete, func(ctx *gin.Context) {ctx.String(http.StatusOK, user delete)})}order : r.Group(/order){order.GET(/list, controllers.OrderController{}.GetList)}return r }控制user.go package controllersimport (Ranking/modelsRanking/pkg/loggerfmtgithub.com/gin-gonic/ginstrconv )// 实现关于用户的功能 type UserController struct{}func (u UserController) GetUserInfo(c *gin.Context) {idStr : c.Param(id)name : c.Param(name)id, _ : strconv.Atoi(idStr)user, _ : models.GetUsersTest(id)ReturnSuccess(c, 0, name, user, 1)}func (u UserController) GetList(c *gin.Context) {// 程序员手动设置的日志logger.Write(日志信息, user)defer func() {if err : recover(); err ! nil {fmt.Println(捕获异常, err)}}()num1, num2 : 1, 0num3 : num1 / num2ReturnUserGetListError(c, 404, num3) }func (u UserController) AddUser(c *gin.Context) {//logger.Write(日志信息, user)username : c.DefaultPostForm(username, )// 输入检查if username {ReturnError(c, 400, 用户名不能为空)return}id, err : models.AddUser(username)if err ! nil {ReturnError(c, 400, 用户添加失败err.Error()) // 返回具体错误信息return}ReturnSuccess(c, 0, 用户添加成功, id, 1) }// 更新用户名 func (u UserController) UpdateUser(c *gin.Context) {//获取用户信息username : c.DefaultPostForm(username, )idStr : c.DefaultPostForm(id, )id, _ : strconv.Atoi(idStr)//调用方法更新数据库中的用户名models.UpdateUser(id, username)ReturnSuccess(c, 0, 用户更新成功, true, 1) }// 删除用户 func (u UserController) DeleteUser(c *gin.Context) {//获取ididStr : c.DefaultPostForm(id, )id, _ : strconv.Atoi(idStr)//调用方法删除数据库中的用户err : models.DeleteUser(id)if err ! nil {ReturnError(c, 404, 用户删除失败err.Error())}ReturnSuccess(c, 0, 用户删除成功, true, 1)}//func (u UserController) GetAllUsers(c *gin.Context) { // users, err : models.GetAllUsers() // if err ! nil { // ReturnError(c, 404, 用户列表获取失败err.Error()) // } // ReturnSuccess(c, 0, 用户列表获取成功成功, users, 1) //}func (u UserController) GetAllUsers(c *gin.Context) {users, err : models.GetAllUsers()if err ! nil {ReturnError(c, 404, 用户列表获取失败: err.Error())return // 添加 return 结束函数的执行}// 处理成功的情况避免重复的“成功”字样ReturnSuccess(c, 0, 用户列表获取成功, users, 1) }注意在common.go中有需要新建的返回值方法 模块user.go package modelsimport (Ranking/daofmt )type User struct {Id intUsername string }func (User) TableName() string {return user }// GetUsersTest 根据用户ID获取用户信息 func GetUsersTest(id int) (User, error) {var user User//where在 SQL 中生成一个 WHERE 子句以便查找满足条件的记录,?是占位符//first方法用于查找单个记录如果找到则返回该记录否则返回错误err : dao.Db.Where(id ?, id).First(user).Errorreturn user, err }// 调用该方法存储一个新用户 返回主键和错误信息controllers包中调用 func AddUser(username string) (int, error) {user : User{Username: username}err : dao.Db.Create(user).Errorif err ! nil {return 0, fmt.Errorf(添加用户时出错%w, err) // 返回详细错误}return user.Id, nil }func UpdateUser(id int, username string) {dao.Db.Model(User{}).Where(id ?, id).Update(username, username) }// DeleteUser 根据用户ID(主键)删除用户 func DeleteUser(id int) error {err : dao.Db.Delete(User{}, id).Errorreturn err }//func GetAllUsers() ([]User, error) { // var users []User // //没存够100号 所以拿这个数来返回整个列表 // err : dao.Db.Where(id 100, 100).Find(users).Error // return users, err //}func GetAllUsers() ([]User, error) {var users []User//没存够100号 所以拿这个数来返回整个列表err : dao.Db.Where(id ?, 100).Find(users).Errorif err ! nil {return nil, err}return users, nil }
http://www.w-s-a.com/news/694061/

相关文章:

  • 广东网站建设建站模板主机托管公司
  • 网站开发师是做什么的网站域名在哪里备案
  • 什么是网站国内高速空间国外做3d模型的网站
  • 效果建网站的公凡科网登陆
  • 网站域名续费多少钱在线制作图片软件
  • 济南城乡住房建设厅网站中国会议营销网站
  • 展示类网站cms网站seo方法
  • 莒县做网站的公司设计师网站模版
  • 顺德顺的网站建设备份的网站建设方案书
  • 如何做网站广告山东电商网站建设
  • 新手建什么网站赚钱吗WordPress搜狗不收录
  • 石家庄招聘哪个网站做的好网站设计建设公司服务商
  • 建设公司网站大概需要多少钱建站平台和网站开发的区别
  • 淄川区住房和城乡建设局网站门户网站模板源码下载
  • 室内设计公司 网站建设建站塔山双喜
  • 网站建设属于什么经营范围销售网站开发业务
  • 企业建站系统平台优秀网站作品截图
  • 杭州品牌网站制作wordpress多域名移动主题
  • 北京网站网站建设icp备案 网站备案
  • 长春网站公司哪家好电子商务网站建设作文
  • 网站开发php程序员网上店铺怎么运营
  • mip网站怎么做匹配h5婚纱摄影网站模板
  • 怎么注册建设公司网站域名历史价格查询
  • 爱站网seo工具包互联网软件开发工程师
  • 百度站长工具平台登录郑州seo规则
  • 财税公司做网站精品建站教程
  • 建设区块链网站区块链开发平台有哪些
  • 青年人爱看的网站ie显示wordpress网页不完整
  • 优惠券推广网站怎么做青岛正规网站建设哪家便宜
  • 怎么搞一个服务器建设网站wordpress页眉编辑