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

网站还没上线 可以对网站备案吗如何进行seo搜索引擎优化

网站还没上线 可以对网站备案吗,如何进行seo搜索引擎优化,网站建设特点,系统管理的主要内容1. 什么是Gin框架 Gin框架:是一个由 Golang 语言开发的 web 框架,能够极大提高开发 web 应用的效率! 1.1 什么是web框架 web框架体系图(前后端不分离)如下图所示: 从上图中我们可以发现一个Web框架最重要…

1. 什么是Gin框架

Gin框架:是一个由 Golang 语言开发的 web 框架,能够极大提高开发 web 应用的效率!

1.1 什么是web框架

web框架体系图(前后端不分离)如下图所示:

画板

从上图中我们可以发现一个Web框架最重要的一些组成部分:

  • HTTP解析/封装系统:解析HTTP请求以及将响应构造为HTTP请求等任务交由web框架来完成
  • 路由系统:将一个请求路由给某一个指定的处理器函数
  • 逻辑处理系统:是后端人员需要关注的重点区域,编写具体业务逻辑以及链接数据库
  • 模板引擎(前后端不分离):将数据嵌入到HTML模板中,构建动态页面

简单来说,web框架将一些繁琐且与业务逻辑无关的部分封装起来供开发者使用,这样开发人员只需要关注业务逻辑层的实现

1.2 web框架两种架构模式

常见的 web 架构模式有两种:

  1. 前后端不分离
  2. 前后端分离

上面已经介绍了前后端不分离的架构体系图,下图是前后端分离的架构图:

画板

可以看出主要区别在于后端没有了模板引擎,意味着HTML页面、图片等static静态资源全部都在前端服务器部署(如nginx),后端服务器只负责编写接口进行业务逻辑处理,然后将前端所需的数据暴露成接口返回!(不和页面打任何交道)

2. Gin框架

2.1 Gin框架如何安装

在Go 1.11之后引入了包管理机制,我们就可以使用go mod tidy一键将代码中所需导入的包从远程服务器下载到本地

package mainimport "github.com/gin-gonic/gin"func main() {// 获取引擎对象r := gin.Default()// 设置路由r.GET("/hello", func(c *gin.Context) {c.String(200, "Hello Gin")})// 启动r.Run(":8080")
}

编写完上述代码以后在控制台输入以下命令:

  1. go mod init gin_first:包管理初始化
  2. go mod tidy:下载所需依赖

看到上述信息就表明 gin 框架已经引入完毕!可以正式编写代码啦~

2.2 Gin框架的路由系统

2.2.1 基本使用

其实在 2.1 节我们已经初步使用过路由系统了

// 设置路由
r.GET("/hello", func(c *gin.Context) {c.String(200, "hello gin")
})

基本语法:r.操作方法(url, 处理器函数)

  • 操作方法:引擎对象基本支持所有的HTTP请求方法,比如GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS,以及Any(任何请求)、NoRoute(没有请求对应上时访问)
  • url:表示请求对应的路径
  • 处理器函数:表示请求路径为"/hello"时映射到该处理器函数进行执行

现在我们通过浏览器使用GET请求访问路径:http://localhost:8080/hello

2.2.2 路由分组

有时候我们希望对一个 url 路径做更统一化的管理,比如"/user/login"和"/user/register"实际上都是在"/user"路径下的子路由,这个时候就需要引入 路由分组

基本语法:子路由对象 := r.Group(根路由)

package mainimport "github.com/gin-gonic/gin"func main() {// 获取引擎对象r := gin.Default()// 设置根路由userRouter := r.Group("/user"){userRouter.GET("/login", func(ctx *gin.Context) {ctx.String(200, "/user/login")})userRouter.GET("/register", func(ctx *gin.Context) {ctx.String(200, "/user/register")})}// 启动r.Run(":8080")
}

2.3 Gin框架获取参数

2.3.1 获取基本信息
2.3.1.1 获取请求方法

比如在Any请求内部想要知道具体请求方法可以使用:

基本语法:var method string = ctx.Request.Method

package mainimport ("fmt""github.com/gin-gonic/gin"
)func handleFunc(ctx *gin.Context) {// 获取请求方法method := ctx.Request.Methodfmt.Println("请求方法是:" + method)ctx.String(200, "request ok")
}func main() {// 获取引擎对象r := gin.Default()// 设置路由r.Any("/method", handleFunc)// 启动r.Run(":8080")
}

代码运行结果:

2.3.1.2 获取请求URL

基本语法:var url string = ctx.Request.URL

package mainimport ("fmt""github.com/gin-gonic/gin"
)func handleFunc(ctx *gin.Context) {// 获取请求URLvar url string = ctx.Request.URL.String()fmt.Println("请求URL是:" + url)ctx.String(200, "request ok")
}func main() {// 获取引擎对象r := gin.Default()// 设置路由r.GET("/url", handleFunc)// 启动r.Run(":8080")
}

代码运行结果:

2.3.1.3 获取远程IP地址

基本语法:

  • 方式一:var remoteAddr string = ctx.Request.RemoteAddr(包含端口)
  • 方式二:var remoteAddr string = ctx.ClientIP()(不包含端口)
package mainimport ("fmt""github.com/gin-gonic/gin"
)func handleFunc1(ctx *gin.Context) {// 获取远程ipvar addr string = ctx.Request.RemoteAddrfmt.Println("远程ip:", addr)ctx.String(200, "request ok")
}func handleFunc2(ctx *gin.Context) {// 获取远程ipvar addr string = ctx.ClientIP()fmt.Println("远程ip:", addr)ctx.String(200, "request ok")
}func main() {// 获取引擎对象r := gin.Default()// 设置路由r.GET("/addr1", handleFunc1)r.GET("/addr2", handleFunc2)// 启动r.Run(":8080")
}

代码运行结果:

2.3.1.4 获取请求头信息

本语法:var headerInfo string = ctx.GetHeader(键)

package mainimport ("fmt""github.com/gin-gonic/gin"
)func handleFunc(ctx *gin.Context) {// 获取指定请求头var userAgent string = ctx.GetHeader("User-Agent")fmt.Println("Content-Type:", userAgent)ctx.String(200, "request ok")
}func main() {// 获取引擎对象r := gin.Default()// 设置路由r.GET("/header", handleFunc)// 启动r.Run(":8080")
}

代码运行结果:

2.3.2 获取请求数据
2.3.2.1 获取查询字符串内容

通常来说使用 GET 请求发送请求都会将数据放置在查询字符串位置

  • 方式一 :var content string = ctx.Query(键)
  • 方式二:var content string = ctx.DefaultQuery(键, 缺省值),如果不存在则使用默认值填充
  • 方式三:value, ok := ctx.GetQuery(键),可以通过ok判断是否存在键
package mainimport ("fmt""github.com/gin-gonic/gin"
)func handleFunc1(ctx *gin.Context) {// 获取查询字符串数据var username = ctx.Query("username")var pwd = ctx.Query("pwd")fmt.Println("username:", username)fmt.Println("pwd:", pwd)ctx.String(200, "request ok")
}func handleFunc2(ctx *gin.Context) {// 获取查询字符串数据var user = ctx.DefaultQuery("user", "wjj")fmt.Println("user:", user)ctx.String(200, "request ok")
}func handleFunc3(ctx *gin.Context) {// 获取查询字符串数据user, exists := ctx.GetQuery("user")if exists {fmt.Println("键存在,值为:", user)} else {fmt.Println("键不存在!")}ctx.String(200, "request ok")
}func main() {// 获取引擎对象r := gin.Default()// 设置路由r.GET("/queryString1", handleFunc1)r.GET("/queryString2", handleFunc2)r.GET("/queryString3", handleFunc3)// 启动r.Run(":8080")
}

程序运行结果:

2.3.2.2 获取表单数据

前端使用 form表单 提交发送请求,此时Content-Typex-www-form-urlencoded可以使用PostForm获取表单内容

  • 方式一 :var content string = ctx.PostForm(键)
  • 方式二:var content string = ctx.DefaultPostForm(键, 缺省值),如果不存在则使用默认值填充
  • 方式三:value, ok := ctx.GetPostForm(键),可以通过ok判断是否存在键
package mainimport ("fmt""github.com/gin-gonic/gin"
)func handleFunc1(ctx *gin.Context) {// 获取查询字符串数据var username = ctx.PostForm("username")var pwd = ctx.PostForm("pwd")fmt.Println("username:", username)fmt.Println("pwd:", pwd)ctx.String(200, "request ok")
}func handleFunc2(ctx *gin.Context) {// 获取查询字符串数据var user = ctx.DefaultPostForm("user", "wjj")fmt.Println("user:", user)ctx.String(200, "request ok")
}func handleFunc3(ctx *gin.Context) {// 获取查询字符串数据user, exists := ctx.GetPostForm("user")if exists {fmt.Println("键存在,值为:", user)} else {fmt.Println("键不存在!")}ctx.String(200, "request ok")
}func main() {// 获取引擎对象r := gin.Default()// 加载HTML资源r.LoadHTMLGlob("templates/*")// 设置路由r.GET("/", func(ctx *gin.Context) {ctx.HTML(200, "index.html", nil)})r.POST("/postform1", handleFunc1)r.POST("/postform2", handleFunc2)r.POST("/postform3", handleFunc3)// 启动r.Run(":8080")
}

程序运行结果:

2.3.2.3 获取JSON请求体数据

Go语言没有提供类似于 PostForm、Query 这样的API直接获取JSON数据,但是Go提供了ShouldBind函数,可以将 json 类型的数据自动映射到指定的结构体对象上

语法格式:ctx.ShouldBind(&结构体对象)

package mainimport ("fmt""github.com/gin-gonic/gin"
)type Student struct {Username string `json:"username"`Password string `json:"password"`
}func main() {// 获取引擎对象r := gin.Default()// 设置路由r.POST("/", func(ctx *gin.Context) {// 使用ShouldBind函数获取JSON数据var student Studenterr := ctx.ShouldBind(&student)if err != nil {fmt.Println(err)ctx.String(500, "解析错误")} else {fmt.Println(student)ctx.String(200, "request ok")}})// 启动r.Run(":8080")
}

程序运行结果:

2.4 Gin框架返回响应

2.4.1 返回HTML页面

语法格式:ctx.HTML(响应状态码, 页面, 数据对象)

  • 响应状态码:对应的HTTP状态码
  • 页面:具体页面路径
  • 数据对象:与模板引擎相关(后续章节介绍)
package mainimport "github.com/gin-gonic/gin"func main() {// 获取引擎对象r := gin.Default()// 加载模板文件r.LoadHTMLGlob("templates/*")// 设置路由r.GET("/", func(ctx *gin.Context) {// 返回首页ctx.HTML(202, "index.html", nil)})// 启动r.Run(":8080")
}

程序运行结果:

2.4.2 返回String类型

语法格式:ctx.String(响应状态码, 格式化字符串)

  • 响应状态码:对应的HTTP状态码
  • 格式化字符串:具体返回的文本内容
package mainimport "github.com/gin-gonic/gin"func main() {// 获取引擎对象r := gin.Default()// 设置路由r.GET("/", func(ctx *gin.Context) {// 返回sring类型ctx.String(200, "string 类型")})// 启动r.Run(":8080")
}

程序运行结果:

2.4.3 返回JSON类型

语法格式:ctx.JSON(响应状态码, gin.H对象)

  • 响应状态码:对应的HTTP状态码
  • gin.H对象:具体返回JSON格式对象
package mainimport "github.com/gin-gonic/gin"func main() {// 获取引擎对象r := gin.Default()// 设置路由r.GET("/", func(ctx *gin.Context) {// 返回json类型ctx.JSON(200, gin.H{"name": "wjj","age":  21,})})// 启动r.Run(":8080")
}

程序运行结果:

2.4.4 返回XML类型

语法格式:ctx.XML(响应状态码, gin.H对象)

  • 响应状态码:对应的HTTP状态码
  • gin.H对象:具体返回XML格式对象
package mainimport "github.com/gin-gonic/gin"func main() {// 获取引擎对象r := gin.Default()// 设置路由r.GET("/", func(ctx *gin.Context) {ctx.XML(200, gin.H{"name": "wjj","age":  21,})})// 启动r.Run(":8080")
}

程序运行结果:


文章转载自:
http://wanjiawollastonite.bqyb.cn
http://wanjiaorthotropism.bqyb.cn
http://wanjiamizzensail.bqyb.cn
http://wanjiameatman.bqyb.cn
http://wanjiaadnominal.bqyb.cn
http://wanjialubricious.bqyb.cn
http://wanjiapeekaboo.bqyb.cn
http://wanjiaformicivorous.bqyb.cn
http://wanjiapipul.bqyb.cn
http://wanjiapenetrameter.bqyb.cn
http://wanjiaantimorph.bqyb.cn
http://wanjiaorans.bqyb.cn
http://wanjiaalkalimetry.bqyb.cn
http://wanjiaspindleage.bqyb.cn
http://wanjiateazle.bqyb.cn
http://wanjiasidetone.bqyb.cn
http://wanjiagruff.bqyb.cn
http://wanjiacadent.bqyb.cn
http://wanjiaeagre.bqyb.cn
http://wanjiafaciobrachial.bqyb.cn
http://wanjiaoblige.bqyb.cn
http://wanjiaponderability.bqyb.cn
http://wanjiafumigation.bqyb.cn
http://wanjiaenchase.bqyb.cn
http://wanjiaearbender.bqyb.cn
http://wanjiagermicidal.bqyb.cn
http://wanjiacounsel.bqyb.cn
http://wanjiahardly.bqyb.cn
http://wanjialistenable.bqyb.cn
http://wanjiainterfibrillar.bqyb.cn
http://wanjiapretzel.bqyb.cn
http://wanjiainconsiderately.bqyb.cn
http://wanjiastreptodornase.bqyb.cn
http://wanjiamonomolecular.bqyb.cn
http://wanjiacarmen.bqyb.cn
http://wanjiamarinate.bqyb.cn
http://wanjiaskald.bqyb.cn
http://wanjiapneumatometer.bqyb.cn
http://wanjiadoubt.bqyb.cn
http://wanjiarockslide.bqyb.cn
http://wanjiaunequalable.bqyb.cn
http://wanjiamafioso.bqyb.cn
http://wanjiasahara.bqyb.cn
http://wanjiamisimpression.bqyb.cn
http://wanjiadecrease.bqyb.cn
http://wanjiascum.bqyb.cn
http://wanjiademilitarise.bqyb.cn
http://wanjialocomotory.bqyb.cn
http://wanjiaquadriceps.bqyb.cn
http://wanjiajaniceps.bqyb.cn
http://wanjiathrombosthenin.bqyb.cn
http://wanjiaawkwardly.bqyb.cn
http://wanjiawolframium.bqyb.cn
http://wanjiagaedhelic.bqyb.cn
http://wanjiaelectorate.bqyb.cn
http://wanjiascalar.bqyb.cn
http://wanjiaridiculous.bqyb.cn
http://wanjiahokey.bqyb.cn
http://wanjiacylindric.bqyb.cn
http://wanjiaboxer.bqyb.cn
http://wanjiacrabstick.bqyb.cn
http://wanjiasilverless.bqyb.cn
http://wanjiadisubstituted.bqyb.cn
http://wanjiarifler.bqyb.cn
http://wanjiatrustbuster.bqyb.cn
http://wanjiacoelentera.bqyb.cn
http://wanjiaspermatoid.bqyb.cn
http://wanjiapinnatilobed.bqyb.cn
http://wanjiamigod.bqyb.cn
http://wanjiaglucogenic.bqyb.cn
http://wanjiaenology.bqyb.cn
http://wanjiachangeroom.bqyb.cn
http://wanjiaexaminant.bqyb.cn
http://wanjiaabjectly.bqyb.cn
http://wanjiamilitary.bqyb.cn
http://wanjiapeplum.bqyb.cn
http://wanjiaprig.bqyb.cn
http://wanjiahackbuteer.bqyb.cn
http://wanjiaincrease.bqyb.cn
http://wanjiawbn.bqyb.cn
http://www.15wanjia.com/news/102757.html

相关文章:

  • 北京微信网站建设报价单搜狗提交入口网址
  • 广州网站制作武汉地推团队
  • 万网 网站建设近期时事新闻
  • 深圳网站建设伪静态 报价 jsp 语言太原seo排名外包
  • 上海网站建设方案咨询网络服务中心
  • 如何做招聘网站的对比seo自学网app
  • 有没有给别人做图赚钱的网站营销平台有哪些
  • 怎样做摄影网站网络优化工作内容
  • 网站在线发稿媒体平台
  • 网站开发测试工具如何注册域名及网站
  • 阳江市网站建设seo快速排名站外流量推广
  • js跳转网站怎么做网络营销策划步骤
  • 专业网站建设网站开发公司搜索引擎有哪些种类
  • 网站备案一般要多久百度推广开户渠道公司
  • 网站建设手机网站怎么优化
  • 临沂做网站推广的公司哪家好网络推广公司名字
  • 佛山设计公司武汉seo优化
  • 自己制作一个网站怎么制作如何优化网站推广
  • 选择一个网站进行优化手机百度旧版本下载
  • 网上房地产上海黑帽seo
  • 网站建设与搜索引擎营销的关系如何进行网络营销策划
  • 做b2b网站如何盈利模式网站快速优化排名推荐
  • wordpress 主题添加标签汕头搜索引擎优化服务
  • 男的和女的做那种事情网站手机优化
  • 网站开发常用jquery插件seo方案
  • 如何免费做网站的教程seo研究中心官网
  • 在网站上做教学直播平台多少钱seo如何建立优化网站
  • 聚焦伟业网站怎么做推广网站推广软件下载安装免费
  • 怎么提高网站曝光360搜索建站
  • 广州网址大全江北seo