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
看着很便捷、很简单,但是它也存在很多不足:
不能单独的对请求方法(POST,GET等)注册特定的处理函数
不支持Path变量参数
不能很很好的获取参数
不支持参数校验
不支持参数绑定
不能更好的多种格式输出
性能一般
扩展性不足
……
以上等等,这些又都是我们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
要好多了。