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

那个网站做玉石最专业长安镇做网站

那个网站做玉石最专业,长安镇做网站,网站 侧边栏,暴走漫画网站建设中模板简介 只作为快速入门、了解Go的GinGorm框架的demo#xff0c;不能作为企业级开发。 详细用法请看官网 《Gin官网》 《Gorm官网》 使用GoLand创建Go项目#xff08;默认modules#xff09; go版本1.22.2 需要设置代理下载go相关软件包#xff0c;否则软件包可能无法下载。…简介 只作为快速入门、了解Go的GinGorm框架的demo不能作为企业级开发。 详细用法请看官网 《Gin官网》 《Gorm官网》 使用GoLand创建Go项目默认modules go版本1.22.2 需要设置代理下载go相关软件包否则软件包可能无法下载。 https://goproxy.cn目录结构 go.mod就是管理相关软件的版本信息如果你学习过Java可以简单理解mod就是maven、gradle等构建工具 安装 Gin Gorm 软件包 控制台执行以下三条命令否则启动会报错。 gin web框架 gorm orm框架 gorm mysql 数据库驱动 go get -u github.com/gin-gonic/gin go get -u gorm.io/gorm go get -u gorm.io/driver/mysql创建mysql数据库 创建main.go文件 go有且仅有一个main函数这个是跟java不太一样的地方java是允许有多个main函数的。 //包的概念 package main//引入的包路径 import (fmtgithub.com/gin-gonic/gingorm.io/driver/mysqlgorm.io/gormnet/httppathtime )//定义一个结构体 type UserInfo struct {gorm.Model //gorm模型默认包含 ID、CreatedAt、UpdatedAt、DeletedAt 4个变量Username string gorm:index form:username json:username binding:requiredPassword string form:password json:password binding:required }// 自定义 gin 中间件 MyHandlerFunc func MyHandlerFunc(invoke bool) gin.HandlerFunc {return func(c *gin.Context) {if invoke {fmt.Println(请求开始......)start : time.Now()//在请求上下文中设置值后续的处理函数可以获取到该值c.Set(token, 1)token, ok : c.Get(token)if !ok {c.JSON(http.StatusUnauthorized, gin.H{code: http.StatusUnauthorized,message: 未授权,})return}fmt.Printf(token %v\n, token)c.Next()//c.Abort()表示阻止代码继续往下执行//c.Abort()//计算请求耗时cost : time.Since(start)fmt.Println(请求耗时:, cost)fmt.Println(请求结束......)} else {c.Next()}} }//main函数 func main() {//0.在控制台输入 go get -u github.com/gin-gonic/gin 安装 Gin 软件包//返回默认路由引擎r : gin.Default()//指定用户使用GET请求访问/hello并执行匿名函数返回JSON格式map[string]的数据//1.返回map一般用于临时返回不推荐r.GET(/map, func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{message: Hello World,})})/*2.返回结构体【推荐】类似java中的对象但是首字母必须大写否则无法进行序列化和反序列化以及灵活使用tag来对结构体进行定制化操作*/type Person struct {//后面写json:name表示如果以json返回则变量名使用nameName string json:nameMessage string json:messageAge int json:age}r.GET(/struct, func(c *gin.Context) {data : Person{Meta39, Java 学习 Go, 25}c.JSON(http.StatusOK, data)})//3.请求地址携带参数的请求【不推荐】主要使用c.Query访问localhost:8080/query?nameMeta39age25浏览器返回Meta39控制台输出age: 25r.GET(/query, func(c *gin.Context) {name : c.Query(name)age : c.Query(age)c.JSON(http.StatusOK, gin.H{name: name,})fmt.Printf(age: %s\n, age)})//4.获取URL路径参数【推荐】根据用户ID查询用户信息访问localhost:8080/user/1//relativePath也可以是/user/:id/:age多个组合r.GET(/user/:id, func(c *gin.Context) {id : c.Param(id)c.JSON(http.StatusOK, gin.H{id: id,name: Meta39,age: 25,sex: Man,})})//5.参数绑定ShouldBind【推荐】(访问localhost:8080/shouldBind在body {username: mata,password: 123456})r.POST(/shouldBind, func(c *gin.Context) {//声明UserInfo类型的变量uvar u UserInfo// 类似于 Spring RequestBody 注解err : c.ShouldBind(u)if err ! nil {c.JSON(http.StatusBadRequest, gin.H{error: err.Error(),})return}fmt.Printf(%v\n, u)c.JSON(http.StatusOK, gin.H{success: ok,})})//6.文件上传r.POST(/upload, func(c *gin.Context) {//从请求中读取文件f, err : c.FormFile(file)if err ! nil {c.JSON(http.StatusBadRequest, gin.H{error: err.Error(),})return}//将读取的文件保存到本地dst : path.Join(./, f.Filename)_ c.SaveUploadedFile(f, dst)c.JSON(http.StatusOK, gin.H{success: ok,})})//7.处理404r.NoRoute(func(c *gin.Context) {c.JSON(http.StatusNotFound, gin.H{code: 404,message: 404 Not Found,data: nil,})})//8.路由组【支持嵌套】类似SpringBoot里的RequestMappinguserGroup : r.Group(/users){//根据用户id查询用户userGroup.GET(/:id, func(c *gin.Context) {id : c.Param(id)c.JSON(http.StatusOK, gin.H{id: id,name: Meta39,})})//创建用户userGroup.POST(/, func(c *gin.Context) {var u UserInfoerr : c.ShouldBind(u)if err ! nil {c.JSON(http.StatusBadRequest, gin.H{error: err.Error(),})}fmt.Printf(创建用户%v\n, u)c.JSON(http.StatusOK, gin.H{success: ok,})})}//9.定义中间件一般放到路由组Group类似Java中的filter过滤器r.GET(/handlerFunc, MyHandlerFunc(true), func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{message: MyHandlerFunc,})})//10.在控制台输入 go get -u gorm.io/gorm 安装 gorm 软件包//11.在控制台输入 go get -u gorm.io/driver/mysql 安装 gorm mysql 数据库驱动软件包dsn : root:123456tcp(127.0.0.1:3306)/gorm?charsetutf8mb4parseTimeTruelocLocaldb, gormErr : gorm.Open(mysql.Open(dsn), gorm.Config{})if gormErr ! nil {panic(failed to connect database)}// 迁移 schema_ db.AutoMigrate(UserInfo{})var userInfo UserInfo// Createdb.Create(UserInfo{Username: Meta39, Password: 123456})// Readdb.First(userInfo, 1) // 根据整型主键查找db.First(userInfo, username ?, Meta39) // 查找 username 字段值为 Meta39 的记录// Update - 将 userInfo 的 Password 更新为 654321db.Model(userInfo).Update(Password, 654321)// Update - 更新多个字段db.Model(userInfo).Updates(UserInfo{Username: Meta, Password: 123}) // 仅更新非零值字段db.Model(userInfo).Updates(map[string]interface{}{Username: Meta1, Password: 234})// Delete - 删除 userInfo默认软删除即打上删除标志如在deleted_at填充时间表示这条数据已经被删除了//db.Delete(userInfo, 1)//永久删除//db.Unscoped().Delete(userInfo, 1)//启动服务不指定端口号则默认8080ginErr : r.Run(:8080)//启动异常处理并输出异常信息if ginErr ! nil {fmt.Printf(ginErr:%v\n, ginErr)return}}控制台执行 go run .\main.go打开浏览器访问localhost:8080/map会输出JSON格式的Hello World 数据库会有一条id 1的记录
http://www.hkea.cn/news/14417386/

相关文章:

  • 贵州住房和城乡建设局网站网站开发html
  • 开发型网站报价方法成都最好的效果图公司
  • 农村建设房子建设网站建设显示电脑没有安装wordpress
  • 平江网站建设百度网站官网网址
  • 彩票网站定制网站页面模板
  • 创立网站成本网站建设后期需要后期做的
  • 网站推广软文代发打开2345网址
  • 网站开发采用了哪些技术怎么写网站优化细节
  • 本溪做网站的哪些网站是用wordpress搭建的
  • 视频网站开发研究背景做网站设计制作的
  • 济南网站备案程序想做网站的客户在哪找
  • 个人网站开发可行性报告南海佛山网站建设
  • 惠州品牌网站建设价格推广普通话的文章
  • 分页网站制作一个app的完整流程
  • 9i网站建设如何将下载好的网站模板用到织梦程序上
  • 黑龙江省建设厅网站的电话如果在浏览器上做一网站广告大约需要多少钱
  • 13572074638网站建设云南安宁做网站的公司
  • 商城购物网站开发背景免费建立网站哪个好
  • 渭南华阴建设银行的网站是多少网站建设的运作原理
  • 2880元网站建设wordpress如何修改首页模板
  • 网站建站代理phpnow 安装wordpress
  • 做网站和推广工资多少钱wordpress不能外部链接
  • 专做正品 网站今天重大新闻头条新闻国际新闻
  • 长沙城市建设档案馆网站做网站一般都用什么字体
  • 商城做网站哪家好毕业设计医院网站设计怎么做
  • 网站浮动窗口如何做2020给个免费网站好人有好报
  • 作品 上海高端网站设计网页制作基础教程例子ppt
  • 企业商务网站的技术中国十大网站有哪些
  • 小说网站80电子书怎么做浅谈电子商务网站建设与管理的理解
  • 做能支付的网站贵吗怎样选择高性价比的建站公司