最近找工作,面试了一些公司后发现,了解Web框架还是很有必要的,在此做一些记录。
Web框架
Web框架是用于进行Web开发的一套软件架构,使用Web框架可以简化web应用程序开发。
Web框架提供了工具和库来实现简单、常见的开发任务,包括路由处理,模板渲染,数据库交互,格式化输出 等,使得很多的业务逻辑外的功能不需要自己再去完善,而是使用框架已有的功能就可以,这就提高了开发web应用的效率。
主流的Web框架都以这种方式工作:它们接收 HTTP 请求,分派代码,产生 HTML,创建带有内容的 HTTP 响应。
Go有哪些Web框架
- 参考链接:
Go web 框架怎么选
推荐几个不错的Go语言Web框架
比较多人推荐的有如下:
各框架性能对比可以参考这个链接,来自gin的文档。
框架的选择可以从以下几个角度衡量:学习代价、开发和维护效率、框架的表现、缓存支持、网络安全等;Gin有使用过的许多人推荐,且新手友好,于是笔者决定从Gin上手。
Gin 体验
ps:Go Gin 简明教程 这篇文章的博主还写了很多go相关的好文,以及他自己用go实现的框架教程,新手友好,推荐阅读。
这里仅放一下hello world的示例,可以从参考链接里的示例获取更多内容。
package main
import (
"log"
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
// 匹配/users/xxx
r.GET("/users/:name", func(c *gin.Context) {
name := c.Param("name")
c.String(http.StatusOK, "Hello %s\n", name)
})
// 带query参数
r.GET("/books", func(c *gin.Context) {
name := c.Query("name")
c.String(http.StatusOK, "finding for book: %s\n", name)
})
// 表单数据
r.POST("/register", func(c *gin.Context) {
email := c.PostForm("email")
password := c.DefaultPostForm("password", "123456")
c.JSON(http.StatusOK, gin.H {
"email": email,
"password": password,
})
})
// 分组
defaultHandler := func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"path": c.FullPath(),
})
}
// group: v1
v1 := r.Group("/v1")
{
v1.GET("/posts", defaultHandler)
v1.GET("/series", defaultHandler)
}
// group: v2
v2 := r.Group("/v2")
{
v2.GET("/posts", defaultHandler)
v2.GET("/series", defaultHandler)
}
type Student struct {
Name string
Age int
}
stus := []Student{
{
Name: "Jack", Age: 20 },
{
Name: "David", Age: 18 },
}
// 模板渲染
r.LoadHTMLGlob("templates/*")
r.GET("/students", func(c *gin.Context) {
c.HTML(http.StatusOK, "arr.tmpl", gin.H{
"title": "Gin",
"stuArr": stus,
})
})
// listen and serve on 0.0.0.0:8080
r.Run(":8080")
}
用到的模板文件:
<!-- templates/arr.tmpl -->
<html>
<body>
<p>hello, {
{.title}}</p>
{
{range $index, $ele := .stuArr }}
<p>{
{ $index }}: {
{ $ele.Name }} is {
{ $ele.Age }} years old</p>
{
{ end }}
</body>
</html>