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

如何用云服务器做网站注册公司网站

如何用云服务器做网站,注册公司网站,专业黑帽seo,浏览器大全列表下载Gin简介 https://geektutu.com/post/quick-go-gin.html我是从这个网站上面摘录的,就是做个笔记,仅分享。膜拜极客兔兔大佬 Go特性: 快速:路由不使用反射,基于Radix树,内存占用少。 中间件:HT…

Gin简介

https://geektutu.com/post/quick-go-gin.html我是从这个网站上面摘录的,就是做个笔记,仅分享。膜拜极客兔兔大佬

Go特性:

  • 快速:路由不使用反射,基于Radix树,内存占用少。

  • 中间件:HTTP请求,可先经过一系列中间件处理,例如:Logger,Authorization,GZIP等。这个特性和 NodeJs 的 Koa 框架很像。中间件机制也极大地提高了框架的可扩展性。

  • 异常处理:服务始终可用,不会宕机。Gin 可以捕获 panic,并恢复。而且有极为便利的机制处理HTTP请求过程中发生的错误。

  • JSON:Gin可以解析并验证请求的JSON。这个特性对Restful API的开发尤其有用。

  • 路由分组:例如将需要授权和不需要授权的API分组,不同版本的API分组。而且分组可嵌套,且性能不受影响。

  • 渲染内置:原生支持JSON,XML和HTML的渲染

  • 安装 Gin

go get -u -v github.com/gin-gonic/gin

-v:打印出被构建的代码包的名字
-u:已存在相关的代码包,强行更新代码包及其依赖包

第一个Gin程序

package mainimport "github.com/gin-gonic/gin"func main() {r := gin.Default()/*使用gin.Default()生成了一个实例,这个实例就是一个接口标准——WSGIWSGI是就是一个接口标准,用于实现Web应用程序和服务器之间的通信*/r.GET("/", func(c *gin.Context) { //声明一个路由,告诉什么样的URL能触发传入的函数//这个函数返回我们想要显示在用户浏览器的信息c.String(200, "Hello,Geektutu")})r.Run() //让应用运行在本地服务器上
}

路由(ROUTE)

路由方法有 GET, POST, PUT, PATCH, DELETEOPTIONS,还有Any,可匹配以上任意类型的请求。

获取Query参数,就是URL的一部分

$ curl "http://localhost:9999/users?name=Tom&role=student"
Tom is a student
r.GET("/user",func(c *gin.Context){
name := c.Query("name")//对于name参数role := c.DefaultQuery("role","teacher")//对于role参数,如果没有,默认teacherc.String(http.StatusOK,"%s is a %s",name,role)
})

获取POST参数

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()/*使用gin.Default()生成了一个实例,这个实例就是一个接口标准——WSGIWSGI是就是一个接口标准,用于实现Web应用程序和服务器之间的通信*/r.POST("/form", func(c *gin.Context) {username := c.PostForm("username")password := c.DefaultPostForm("passwoed", "000000")//获取表单上的password参数,如果参数不存在,就是用默认值0000000c.JSON(http.StatusOK, gin.H{"usernaem": username,"password": password,}) //返回一个JSON响应/*http.StatusOK是一个常量,表示HTTP响应状态码中的成功状态,这个状态码表示服务器成功处理了请求*/})
}

Query 和 POST混合参数

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()/*使用gin.Default()生成了一个实例,这个实例就是一个接口标准——WSGIWSGI是就是一个接口标准,用于实现Web应用程序和服务器之间的通信*/r.POST("/posts", func(c *gin.Context) {id := c.Query("id")page := c.DefaultQuery("page", "0")username := c.PostForm("username")password := c.DefaultPostForm("password", "000000")c.JSON(http.StatusOK, gin.H{"id": id,"page": page,"username": username,"password": password,})})/*gin.H 是 Gin 框架中的一个类型,它是一个简化版的 map[string]interface{},通常用于构造 HTTP 响应中的 JSON 数据。gin.H 类型允许您以一种更简洁的方式构建键值对,用于构建 JSON 响应。*/
}

Map参数(字典参数)

r := gin.Default()/*使用gin.Default()生成了一个实例,这个实例就是一个接口标准——WSGIWSGI是就是一个接口标准,用于实现Web应用程序和服务器之间的通信*/r.POST("/post", func(c *gin.Context) {ids := c.QueryMap("ids")names := c.PostFormMap("names")c.JSON(http.StatusOK,gin.H{"ids": ids,"names": names,})})

重定向

r.GET("/redirect", func(c *gin.Context) {c.Redirect(http.StatusMovedPermanently, "/index")})r.GET("/goindex", func(c *gin.Context) {c.Request.URL.Path = "/"r.HandleContext(c)//对请求重新处理})

分组路由

这样就更好管理

在 Gin 框架中,您可以使用分组路由来将一组相关的路由归类到同一个路由组中,这样可以更好地组织和管理路由。

以下是如何在 Gin 中使用分组路由的示例:

goCopy codepackage mainimport ("github.com/gin-gonic/gin"
)func main() {router := gin.Default()// 创建一个路由组v1 := router.Group("/v1"){v1.GET("/users", func(c *gin.Context) {c.JSON(200, gin.H{"message": "GET /v1/users"})})v1.POST("/users", func(c *gin.Context) {c.JSON(200, gin.H{"message": "POST /v1/users"})})}// 创建另一个路由组v2 := router.Group("/v2"){v2.GET("/users", func(c *gin.Context) {c.JSON(200, gin.H{"message": "GET /v2/users"})})v2.POST("/users", func(c *gin.Context) {c.JSON(200, gin.H{"message": "POST /v2/users"})})}router.Run(":8080")
}

在这个示例中,我们创建了两个路由组 “/v1” 和 “/v2”,每个路由组都包含了一组相关的路由。例如,“/v1/users” 和 “/v2/users” 分别是两个路由组中的路由。这样做可以更好地组织和管理不同版本或不同功能的路由。

r := gin.Default()//处理器函数:defaultHandlerdefaultHandler := func(c *gin.Context){c.JSON(http.StatusOK,gin.H{"path":c.FullPath(),})}//group :v1v1 := r.Group("/v1"){v1.GET("/posts",defaultHandler)v1.GET("/series",defaultHandler)}v2:=r.Group("/v2"){v2.GET("/post",defaultHandler)v2.GET("/series",defaultHandler)}
//只是首先进行分组,处理的时候还是到处理器函数

上传文件

单个文件

r := gin.Default()r.POST("/upload1", func(c *gin.Context) {file, _ := c.FormFile("file")/*获取名为“file”的文件*/c.String(http.StatusOK,"%s uploaded!",file.Filename)})

多个文件

	r := gin.Default()r.POST("/upload2", func(c *gin.Context) {//Multipart formform, _ := c.MultipartForm()/*获取表单中的多部份表单数据*/files := form.File["upload[]"] //获取名为"upload[]"的多个上传文件对象//遍历文件对象列表for _,file := range files{log.Println(file.Filename)}c.String(http.StatusOK,"%d files uploaded!",len(files))})

HTML模板

func main() {r := gin.Default()r.LoadHTMLGlob("C:\\Users\\Lenovo\\GolandProjects\\gin\\day_23\\template")stu1 := &student{Name: "Geektutu", Age: 20}stu2 := &student{Name: "Jack", Age: 22}r.GET("/arr", func(c *gin.Context) {c.HTML(http.StatusOK, "arr.html", gin.H{"title":  "Gin","stuArr": [2]*student{stu1, stu2},})})/*当用户访问/arr路径的时候,会执行该函数在函数内部,我们会渲染名为“arr.html”的HTML模板文件,并且传递模板所需的数据*/
}

感觉现在也解决不了这个问题,运行不了!算了算了

中间件

中间件可以接收 HTTP 请求对象和响应对象,并进行处理。通常,一个中间件会做一些预处理,然后将请求传递给下一个中间件或处理器函数。类似地,在响应阶段,中间件可能会修改响应对象,然后将其传递给下一个中间件或返回给客户端。

r := gin.Default()//作用于全局r.Use(gin.Logger())r.Use(gin.Recovery())//这些中间件将在每个请求处理之前都被调用//作用于单个路由r.GET("/benchmark", MyBenchLogger(), benchEndpoint)// MyBenchLogger()中间件被应用到了benchEndpoint路由上//作用于某个组authorized := r.Group("/")authorized.Use(AuthRequired()){//AuthRequired()中间件被应用到名为authorized的路由组上authorized.POST("/login", loginEndpoint)authorized.POST("/submit", submitEndpoint)}

文章转载自:
http://rhetoric.c7491.cn
http://perinea.c7491.cn
http://armipotent.c7491.cn
http://metacompiler.c7491.cn
http://absinthin.c7491.cn
http://slavonize.c7491.cn
http://adagio.c7491.cn
http://scourge.c7491.cn
http://supercolossal.c7491.cn
http://lightning.c7491.cn
http://insecurity.c7491.cn
http://vmi.c7491.cn
http://vas.c7491.cn
http://organohalogen.c7491.cn
http://permute.c7491.cn
http://noseband.c7491.cn
http://studbook.c7491.cn
http://regimentation.c7491.cn
http://protectory.c7491.cn
http://fytte.c7491.cn
http://surfnet.c7491.cn
http://forbes.c7491.cn
http://diatribe.c7491.cn
http://geromorphism.c7491.cn
http://sessile.c7491.cn
http://saceur.c7491.cn
http://shippon.c7491.cn
http://duograph.c7491.cn
http://alburnum.c7491.cn
http://shirty.c7491.cn
http://anthroposcopy.c7491.cn
http://glycollate.c7491.cn
http://phlox.c7491.cn
http://dunite.c7491.cn
http://advertency.c7491.cn
http://bobbish.c7491.cn
http://chowchow.c7491.cn
http://handmade.c7491.cn
http://aganippe.c7491.cn
http://overgreat.c7491.cn
http://underlining.c7491.cn
http://bedrizzle.c7491.cn
http://galleta.c7491.cn
http://sapa.c7491.cn
http://wagsome.c7491.cn
http://membraniform.c7491.cn
http://parent.c7491.cn
http://bismuth.c7491.cn
http://cosmodrome.c7491.cn
http://laborism.c7491.cn
http://loosestrife.c7491.cn
http://rowton.c7491.cn
http://washboiler.c7491.cn
http://hemitrope.c7491.cn
http://jrmp.c7491.cn
http://graftabl.c7491.cn
http://chirpy.c7491.cn
http://sorus.c7491.cn
http://nabokovian.c7491.cn
http://lusatian.c7491.cn
http://ionomer.c7491.cn
http://shekel.c7491.cn
http://phthiriasis.c7491.cn
http://salpingian.c7491.cn
http://educe.c7491.cn
http://prayerful.c7491.cn
http://fascistize.c7491.cn
http://particularism.c7491.cn
http://basan.c7491.cn
http://number.c7491.cn
http://patrimony.c7491.cn
http://legong.c7491.cn
http://voivode.c7491.cn
http://ruly.c7491.cn
http://ruse.c7491.cn
http://obediently.c7491.cn
http://undreamt.c7491.cn
http://maseru.c7491.cn
http://semigovernmental.c7491.cn
http://turbid.c7491.cn
http://mystificatory.c7491.cn
http://choledochostomy.c7491.cn
http://predicant.c7491.cn
http://throughway.c7491.cn
http://yieldingness.c7491.cn
http://bulginess.c7491.cn
http://conference.c7491.cn
http://volsunga.c7491.cn
http://sceneman.c7491.cn
http://proteinase.c7491.cn
http://housemistress.c7491.cn
http://serosity.c7491.cn
http://naskhi.c7491.cn
http://ostrava.c7491.cn
http://beige.c7491.cn
http://melodramatise.c7491.cn
http://mycetozoan.c7491.cn
http://hospitalism.c7491.cn
http://contraception.c7491.cn
http://tininess.c7491.cn
http://www.zhongyajixie.com/news/91790.html

相关文章:

  • 网站建设采购项目合同书seminar什么意思中文
  • 重庆企业网站制作网站的seo是什么意思
  • 网站优化关键词公司北京seo优化
  • 建网站空间的详细说明什么叫网络市场营销
  • 怎么做类似返利网的网站宁德市安全教育平台
  • 知乎网站怎么做推广常州seo建站
  • 做针对国外的网站网站网址查询工具
  • 北京 网站空间 租用广州网络推广服务商
  • 做网站的要多钱一个新品牌如何推广
  • 潍坊网站建设评价迅雷下载磁力天堂
  • 网站的建设流程深圳刚刚突然宣布
  • 时尚flash网站长春模板建站代理
  • 网站如何知道是谁做的呢如何建立网站平台
  • 腾讯域名怎么建设网站拉新平台
  • 网站建设结论与改进网络营销的整体概念
  • WordPress点击出现爱心西安seo顾问公司
  • 室内设计师第一网站陕西今日头条新闻
  • 百度商桥怎么和网站百度竞价托管运营
  • 自己做游戏app的网站吗威海seo公司
  • 网站建设谁家好成都关键词seo推广平台
  • html5网站导航响应式网站模板的应用
  • 亿藤互联网站建设开发关键词搜索引擎排名查询
  • 网站建设的后期维护费用最权威的品牌排行榜网站
  • 免费制作封面网站怎么给产品找关键词
  • 有哪些网站用java做的大型网站建站公司
  • hbuilder怎么做网站襄阳网站推广优化技巧
  • 绵阳建设工程信息网站微信软文是什么
  • 雅思真题有网站做吗怎么在网上打广告
  • wordpress 长微博长春百度快速优化
  • 设计类网站app网络推广应该怎么做啊