重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

GO语言写新年祝福软件 新年祝福制作软件

go语言的webengine叫什么

Java教程

广陵网站建设公司成都创新互联,广陵网站设计制作,有大型网站制作公司丰富经验。已为广陵上1000+提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的广陵做网站的公司定做!

Linux入门

更多

首页

Go语言WEB框架(Gin)详解

在 Go语言开发的 Web 框架中,有两款著名 Web 框架分别是 Martini 和 Gin,两款 Web 框架相比较的话,Gin 自己说它比 Martini 要强很多。

Gin 是 Go语言写的一个 web 框架,它具有运行速度快,分组的路由器,良好的崩溃捕获和错误处理,非常好的支持中间件和 json。总之在 Go语言开发领域是一款值得好好研究的 Web 框架,开源网址:

首先下载安装 gin 包:

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

一个简单的例子:

package main

import "github.com/gin-gonic/gin"

func main() {

//Default返回一个默认的路由引擎

r := gin.Default()

r.GET("/ping", func(c *gin.Context) {

//输出json结果给调用方

c.JSON(200, gin.H{

"message": "pong",

})

})

r.Run() // listen and serve on 0.0.0.0:8080

}

编译运行程序,打开浏览器,访问页面显示:

{"message":"pong"}

gin 的功能不只是简单输出 Json 数据。它是一个轻量级的 WEB 框架,支持 RestFull 风格 API,支持 GET,POST,PUT,PATCH,DELETE,OPTIONS 等 http 方法,支持文件上传,分组路由,Multipart/Urlencoded FORM,以及支持 JsonP,参数处理等等功能,这些都和 WEB 紧密相关,通过提供这些功能,使开发人员更方便地处理 WEB 业务。

Gin 实际应用

接下来使用 Gin 作为框架来搭建一个拥有静态资源站点,动态 WEB 站点,以及 RESTFull API 接口站点(可专门作为手机 APP 应用提供服务使用)组成的,亦可根据情况分拆这套系统,每种功能独立出来单独提供服务。

下面按照一套系统但采用分站点来说明,首先是整个系统的目录结构,website 目录下面 static 是资源类文件,为静态资源站点专用;photo 目录是 UGC 上传图片目录,tpl 是动态站点的模板。

当然这个目录结构是一种约定,可以根据情况来修改。整个项目已经开源,可以访问来详细了解:具体每个站点的功能怎么实现呢?请看下面有关每个功能的讲述:

静态资源站点

一般网站开发中,我们会考虑把 js,css,以及资源图片放在一起,作为静态站点部署在 CDN,提升响应速度。采用 Gin 实现起来非常简单,当然也可以使用 net/http 包轻松实现,但使用 Gin 会更方便。

不管怎么样,使用 Go 开发,我们可以不用花太多时间在 WEB 服务环境搭建上,程序启动就直接可以提供 WEB 服务了。

package main

import (

"net/http"

"github.com/gin-gonic/gin"

)

func main() {

router := gin.Default()

// 静态资源加载,本例为css,js以及资源图片

router.StaticFS("/public", http.Dir("D:/goproject/src/github.com/ffhelicopter/tmm/website/static"))

router.StaticFile("/favicon.ico", "./resources/favicon.ico")

// Listen and serve on 0.0.0.0:80

router.Run(":80")

}

首先需要是生成一个 Engine,这是 gin 的核心,默认带有 Logger 和 Recovery 两个中间件。

router := gin.Default()

StaticFile 是加载单个文件,而 StaticFS 是加载一个完整的目录资源:

func (group *RouterGroup) StaticFile(relativePath, filepath string) IRoutes

func (group *RouterGroup) StaticFS(relativePath string, fs http.FileSystem) IRoutes

这些目录下资源是可以随时更新,而不用重新启动程序。现在编译运行程序,静态站点就可以正常访问了。

Go语言设计与实现(上)

基本设计思路:

类型转换、类型断言、动态派发。iface,eface。

反射对象具有的方法:

编译优化:

内部实现:

实现 Context 接口有以下几个类型(空实现就忽略了):

互斥锁的控制逻辑:

设计思路:

(以上为写被读阻塞,下面是读被写阻塞)

总结,读写锁的设计还是非常巧妙的:

设计思路:

WaitGroup 有三个暴露的函数:

部件:

设计思路:

结构:

Once 只暴露了一个方法:

实现:

三个关键点:

细节:

让多协程任务的开始执行时间可控(按顺序或归一)。(Context 是控制结束时间)

设计思路: 通过一个锁和内置的 notifyList 队列实现,Wait() 会生成票据,并将等待协程信息加入链表中,等待控制协程中发送信号通知一个(Signal())或所有(Boardcast())等待者(内部实现是通过票据通知的)来控制协程解除阻塞。

暴露四个函数:

实现细节:

部件:

包: golang.org/x/sync/errgroup

作用:开启 func() error 函数签名的协程,在同 Group 下协程并发执行过程并收集首次 err 错误。通过 Context 的传入,还可以控制在首次 err 出现时就终止组内各协程。

设计思路:

结构:

暴露的方法:

实现细节:

注意问题:

包: "golang.org/x/sync/semaphore"

作用:排队借资源(如钱,有借有还)的一种场景。此包相当于对底层信号量的一种暴露。

设计思路:有一定数量的资源 Weight,每一个 waiter 携带一个 channel 和要借的数量 n。通过队列排队执行借贷。

结构:

暴露方法:

细节:

部件:

细节:

包: "golang.org/x/sync/singleflight"

作用:防击穿。瞬时的相同请求只调用一次,response 被所有相同请求共享。

设计思路:按请求的 key 分组(一个 *call 是一个组,用 map 映射存储组),每个组只进行一次访问,组内每个协程会获得对应结果的一个拷贝。

结构:

逻辑:

细节:

部件:

如有错误,请批评指正。

awesome-go:很全的go语言资源合集

awesome-go :一个很全的go语言框架,库,软件合集

前面发过关于awsone-python, awsone django, flask。最近在学习golang,所以找到awsone-go

由于内容太多,这里只是列出主要的目录,每一项下面又有很多内容。具体详细的内容,请到官网查看。

github网址 ,

官网 。


网页名称:GO语言写新年祝福软件 新年祝福制作软件
网页路径:http://cqcxhl.com/article/dojhegh.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP