Gin是一个用Go语言编写的web框架,它是一个类似于martini但拥有更好性能的API框架,由于使用了httprouter,速度提高了近40倍。
Gin的特点如下:
-
路由速度快: Gin采用了radix树算法,使得路由的速度非常快。在处理大量请求时,Gin仍然能够保持响应迅速。
-
中间件支持: Gin支持中间件机制,可以通过中间件实现各种功能,例如日志记录、认证授权、API限流等。
-
完备的HTTP处理: Gin提供了完整的HTTP方法,包括GET、POST、PUT、DELETE等,同时还支持自定义HTTP方法。
-
支持JSON解析: Gin默认使用JSON作为数据交换格式,提供了非常方便的JSON解析工具。
-
高效的参数绑定: Gin支持将请求参数绑定到结构体或者map中,简化了请求参数的处理过程。
-
多种渲染模板支持: Gin支持多种渲染模板,包括HTML、JSON、XML等,也可以自定义渲染模板。
-
完善的文档: Gin提供了完整的文档和示例代码,易于学习和使用,同时还有活跃的社区支持。
本人先接触的java,学过springboot,然后参加本次青训营才接触到golang的gin框架,现在我来就自己的感觉讲一下这两个框架的区别和共同点。
区别:
- 开发语言:Gin框架使用Go编程语言开发,而Spring Boot使用Java编程语言开发。
- 性能:由于Go语言的高并发性和轻量级特性,Gin框架在处理大量请求时比Spring Boot更快。
- 配置:Spring Boot拥有非常强大的自动化配置功能,可以简化开发人员的工作,而Gin框架则需要手动配置。
共同点:
- MVC架构:两者都采用MVC设计模式,将业务逻辑、数据存储和用户界面分离。
- RESTful支持:它们都支持RESTful API设计,使得开发人员能够创建基于HTTP协议的API接口。
- 开发效率:它们都提供了丰富的工具和库,可以帮助开发者提高开发效率。
总体来说,Gin框架适合需要高性能和并发处理的Web应用程序,而Spring Boot则适合中小型企业级应用程序,因为它提供了更多的开箱即用的功能和更强大的社区支持。
初始化project项目
go mod init project
go mod tidy
GOPROXY:解决 go get golang.org/x 包失败
# 启用 Go Modules 功能
$env:GO111MODULE="on"
# 配置 GOPROXY 环境变量
$env:GOPROXY="https://goproxy.io"
gin框架简化版
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}
gin框架架构
1.在main方法里,初始化配置文件 以及 数据库
func main() {
utils.InitConfig()
utils.InitMySQL()
r := router.Router()
r.Run(":8080") // 监听并在 0.0.0.0:8080 上启动服务
}
2.在config包里编辑app.yaml
mysql:
dns: "root:root@tcp(127.0.0.1:3306)/ginchat?charset=utf8&parseTime=True&loc=Local"
3.新建utils包 system_init.go
var Db *gorm.DB
func InitConfig() {
viper.SetConfigName("app")
viper.AddConfigPath("config")
err := viper.ReadInConfig()
if err != nil {
fmt.Println(err)
}
fmt.Println("config app:", viper.Get("app"))
fmt.Println("config mysql:", viper.Get("mysql"))
}
func InitMySQL() *gorm.DB {
Db, _ = gorm.Open(mysql.Open(viper.GetString("mysql.dns")), &gorm.Config{})
fmt.Println("MySQL inited ~~~~~~~~~~~~")
return Db
}
4.到 user_basic.go里加上
func GetUserList() []*UserBasic {
data := make([]*UserBasic, 10)
utils.Db.Find(&data)
for _, v := range data {
fmt.Println(v)
}
return data
}
5.在service包里面新建 userservice.go
func GetUserList(c *gin.Context) {
data := make([]*models.UserBasic, 10)
data = models.GetUserList()
c.JSON(200, gin.H{
"message": data,
})
}
6.在router包的app.go
func Router() *gin.Engine {
r := gin.Default()
r.GET("/index", service.GetIndex)
r.GET("/user/getUserList", service.GetUserList)
return r
}