何为框架:
框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了.成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应手的时候,可以尝试改造一些框架,或是自己创造一个.
Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布了1.0版本.具有快速灵活,容错方便等特点.其实对于golang而言,web框架的依赖要远比Python,Java之类的要小.自身的net/http足够简单,性能也非常不错.框架更像是一些常用函数或者工具的集合.借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范.
(1)首先需要安装,安装比较简单,使用go get即可
go get github.com/gin-gonic/gin
如果安装失败,直接去Github clone下来,放置到对应的目录即可.
下面是一个使用Gin的简单例子:
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/ping", func(c *gin.Context) {
"message": "pong",
})
}
简单几行代码,就能实现一个web服务.使用gin的Default方法创建一个路由handler.然后通过HTTP方法绑定路由规则和路由函数.不同于net/http库的路由函数,gin进行了封装,把request和response都封装到gin.Context的上下文环境.最后是启动路由的Run方法监听端口.麻雀虽小,五脏俱全.当然,除了GET方法,gin也支持POST,PUT,DELETE,OPTION等常用的restful方法.
Gin可以很方便的支持各种HTTP请求方法以及返回各种类型的数据,详情可以前往查看.
我们可以使用Gin框架快速的匹配参数,如下代码所示:
浏览器输入以下测试:
返回结果为:
其中c.String是gin.Context下提供的方法,用来返回字符串.
其中c.Json是gin.Context下提供的方法,用来返回Json.
下面我们使用以下gin提供的Group函数,方便的为不同的API进行分类.
注:Gin还包含更多的返回方法如c.String, c.HTML, c.XML等,请自行了解.可以方便的返回HTML数据
我们在之前的组v1路由下新定义一个路由:
下面我们访问
可以看到,通过c.Param("key")方法,Gin成功捕获了url请求路径中的参数.同理,gin也可以捕获常规参数,如下代码所示:
在浏览器输入以下代码:
通过c.Query("key")可以成功接收到url参数,c.DefaultQuery在参数不存在的情况下,会由其默认值代替.
我们还可以为Gin定义一些默认路由:
这时候,我们访问一个不存在的页面:
返回如下所示:
下面我们测试在Gin里面使用Post
在测试端输入:
附带发送的数据,测试即可.记住需要使用POST方法.
继续修改,将PostHandler的函数修改如下
测试工具输入:
发送的内容输入:
返回结果如下:
备注:此处需要指定Content-Type为application/x-www-form-urlencoded,否则识别不出来.
一定要选择对应的PUT或者DELETE方法.
Gin框架快速的创建路由
能够方便的创建分组
支持url正则表达式
支持参数查找(c.Param c.Query c.PostForm)
请求方法精准匹配
由于linux的socket监听机制和TCP协议,多个进程无法监听同一个端口,但是具体到nginx,可以多个nginx进程监听到不同端口,通过一个主进程端口做upstream来实现负载均衡,这个有点类似于网络的汇聚,可以设置不同的策略,比如iphash,urlhash或者RR.
m := martini.Classic()
m.Get("/device/:serialnumber" , func(params martini.Params) string {
detail := GetDeviceState(params["serialnumber"])
result , _ := json.Marshal(detail)
return string(result)
m.Get("/device/ctrl/:serialnumber/:state" , func(params martini.Params) string {
detail := DeviceStateUpdate(params["serialnumber"] , params["state"])
你可以在 GitHub 上找到本项目的源码:concTcp.go.
这个程序的主要逻辑在 handleConnection 函数中,具体实现如下:
首先, main 确保程序至少有一个命令行参数.注意,现有代码并没有检查这个参数是否为有效的 TCP 端口号.不过,如果它是一个无效的 TCP 端口号, net.Listen 就会调用失败,并返回一个错误信息,类似下面这样:
你可以在 维基百科上找到更多关于 nc (即 netcat )的信息.
via:
①.、首先使用一个公共的端口作为监听,让HTTP和HTTPS服务分别监听在各自的端口上.
以上就是土嘎嘎小编大虾米为大家整理的相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!