Golang Gin(上)

摘要:
内置的net/httpGolang具有HTTP服务。我们可以通过内置的net/HTTP包实现HTTP服务。GolangGin作为一个非常优秀的web框架,帮助我们弥补了net/http的不足,还为日常web开发添加了许多功能,可以帮助我们更好地开发web。如果使用GoModule,请使用import直接导入。然后,当您运行gorun时,您将自动下载gin包以供编译和使用。当您使用github下载压缩包并将其放置在本地时,您可能会遇到找不到模块提供包github.com/gin-gonic/bin:安装gin后,您无法找到gin包并执行以下两个命令:gomodinitingomodedit-requiregithub.com/gin-gonic/gin@latest现在让我们举一个例子来看看使用GolangGin有多简单。

net/http

Golang(Go语言)内置是有HTTP服务的,我们可以通过内置的net/http包来实现一个HTTP服务。

func main() {
    http.HandleFunc("/",Index)

    log.Fatal(http.ListenAndServe(":8080", nil))
}

func Index(w http.ResponseWriter, r *http.Request){
    fmt.Fprint(w,"Hello World")
}

这就是一个很简单的HTTP服务实现,我们运行这个代码程序,然后在浏览器里打开http://localhost:8080网址,

Hello World

从代码上看实现一个HTTP服务是非常简单的,这也是Golang语言的优势,在底层做了很多封装,可以让我们更容易的实现相关的服务。

虽然net/http看着很便捷、很简单,但是它也存在很多不足:

  1. 不能单独的对请求方法(POST,GET等)注册特定的处理函数

  2. 不支持Path变量参数

  3. 不能很很好的获取参数

  4. 不支持参数校验

  5. 不支持参数绑定

  6. 不能更好的多种格式输出

  7. 性能一般

  8. 扩展性不足

  9. ……

以上等等,这些又都是我们Web开发中常用的,所以我们只能我们自己开发中自己重复的实现,影响了效率,降低了质量,不同人的开发者,性能也不一样。

这时候,我们就非常需要一个Golang Web 框架来帮我们把这些重复的事情做了,这个就是Golang Gin要做的事情了。Golang Gin 作为一个非常优秀的Web框架,帮我们弥补了net/http的不足,同时还增加了很多日常Web开发使用的功能,可以让我们更好的进行Web开发。

Hello Gin

要使用Gin非常简单,它和其他第三方 Golang 库一样。如果你是基于GOPATH开发的,你需要先使用go get -u github.com/gin-gonic/gin 下载gin,然后import导入即可。

如果你是用Go Module这种方式,使用import直接导入使用,然后你在go run运行的时候,会自动的下载gin包编译使用。当然你也可以通过go mod tidy来下载依赖的模块。

当你采用github下载压缩包,放置在本地时,可能遇到   cannot find module providing package github.com/gin-gonic/gin: 安装gin后找不到gin包

执行下边两条命令:

go mod init gin
 
go mod edit -require github.com/gin-gonic/gin@latest

现在让我们通过一个例子,看下Golang Gin的使用是多么简单吧。

package main

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

func main() {
    r := gin.Default()
    r.GET("/", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "Taobao":"alibaba",
            "Wechat":"tencent",
        })
    })
    r.Run(":8080")
}

然后我们运行它,打开浏览器,输入http://localhost:8080/就可以看到如下内容:

{

"Taobao":"alibaba",
"Wechat":"tencent"

}

看我们输出一个JSON格式的内容是多么简单,这不就是我们项目中经常用到的API 返回的格式吗?不需要特别的包装,即可很方便的实现,比内置的net/http要好多了。

免责声明:文章转载自《Golang Gin(上)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇从Oracle转到Mysql前需了解的50件事Mac如何使用git以及github下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

vSphere HA 原理与配置

应当基于可用性需求和群集的特性选择vSphereHA接入控制策略。...

backgroundsize

当背景大小值为和时,可以设置两个值,也可以设置一个值。当只取一个值时,第二个值相当于auto,但此处的auto不会将背景图像的高度保持在其原始高度,而是与第一个值相同。此外,如果只取一个值,宽度和高度将相同,这相当于背景大小:80%自动。...

JS获取当前时间

如果有更好的方法,请提出建议。进一步解释如下:varmyDate=newDate();我的日期。getYear();//获取当前年份(2位数)myDate getFullYear();//获取完整的年份(4位数,1970-???=0)||);}//----------------------------------------------//日期格式//格式...

C# winform开发嵌套Chrome内核浏览器(WebKit.net)开发(一)

//Www.cnblogs.com/Maxq/p/6566558.htmlWebKit.net是WebKit的一个net包。使用它,。net程序可以非常方便地集成和使用webkit作为加载网页的容器。EventArgse){WebKit.WebKitBrowser=newWebKitBrowser();this.Controls.Add(浏览器);...

Activiti-个人任务

1.分配任务所有者1.1固定分配在业务流程建模期间指定固定任务所有者;在properties视图中,填写Assignee项作为任务所有者;注:通过固定分配方法,任务是逐步执行的,任务负责人将根据bpmn的配置分配给每个任务;1.2表达式分配1.2.1 UEL表达式Activiti使用UEL表达式,UEL是javaEE6...

001_Three.js中的跨域问题

】当请求的资源和请求脚本不在同一域中时,将发生跨域。有关详细信息,请参见链接。这是一个需要进一步考虑的问题。它是一个装载机。它加载本地资源。为什么要跨域请求?...