gorm框架使用基础| 青训营笔记

85 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天

介绍

Go 是 Google 于 2007 年开发的一种编程语言,通常被称为“Golang”。

Go 被设计成一种简单、高效、静态类型的语言,强调并发性和可读性。 它非常强调简单性,使有经验和没有经验的程序员都可以轻松学习。 它还包括用于构建和执行大型复杂软件项目的功能。

Go 的一些显着特性包括:

  • 通过“goroutines”和“channels”内置并发支持
  • 简单的类型系统和严格的语法
  • 一个高效的垃圾收集器
  • 支持交叉编译,允许代码在不同的操作系统和架构上编译运行

Go 被 Uber、Dropbox 和 SoundCloud 等公司使用,并且在构建高性能、可扩展和高效的应用程序方面越来越受欢迎。

对象关系映射 (ORM) 是一种允许开发人员使用对象和类与数据库交互而不是编写原始 SQL 查询的技术。 在 Go 中,有几个可用的 ORM 框架,一些流行的是:

  • Gorm:Gorm 是用于 Go 的全功能 ORM 框架,支持关联、事务等。 它以其简单的语法和易于使用的 API 而闻名。
  • Xorm:Xorm 是另一个流行的 Go 语言 ORM 框架。 它轻巧、快速,支持缓存、事务等高级功能。
  • Beego ORM:Beego ORM 是 Go 的 Beego Web 框架的一部分。 它为处理数据库提供了一个简单直观的 API,旨在与 Beego 框架无缝协作。
  • SQLBoiler:SQLBoiler 是一个 ORM 生成器,可根据您的数据库模式生成 Go ORM。 它支持多种数据库,并提供事务等高级功能。
  • Pop:Pop 是用于 Go 的简单快速的 ORM,支持迁移、事务等。 它旨在易于使用并且具有最小的学习曲线。

这些只是 Go 可用的几个流行的 ORM 框架。 开发人员可以根据自己的具体要求和偏好选择最适合自己需求的一种。

案例

初始化和连接Mysql

package main

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

func main() {
	// Open a database connection using the MySQL driver
	db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer db.Close()

	// Check if the connection is working
	err = db.DB().Ping()
	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Println("Connected to MySQL successfully")
}

在此示例中,gorm.Open 函数用于使用 MySQL 驱动程序打开数据库连接。 连接字符串格式为“user:password@/dbname?charset=utf8&parseTime=True&loc=Local”,其中“user”和“password”为访问数据库的凭证,“dbname”为数据库名称 , 字符串的其余部分指定各种选项,例如字符集和时区。

defer db.Close() 语句确保在程序完成时关闭数据库连接。

最后,db.DB().Ping() 方法用于检查连接是否正常。 如果一切正常,程序将打印“已成功连接到 MySQL”。

建立数据表

// Automatically create the table based on the User struct 
db.AutoMigrate(&User{})

db.AutoMigrate(&User{}) 语句根据 User 结构在数据库中创建用户表。 如果表已经存在,它将被更新以匹配结构。

Gorm 中的 defer db.Close() 语句用于在程序结束时关闭数据库连接。 Go 中的 defer 关键字允许您指定应在当前函数结束时执行的函数或方法,无论它是正常退出还是由于 panic 而退出。

通过使用 defer db.Close(),可以确保数据库连接始终处于关闭状态,即使在程序执行过程中出现错误。 这有助于避免资源泄漏并确保正确清理数据库连接。

例如,如果程序执行过程中发生错误,函数在数据库连接关闭前退出,连接将保持打开状态并消耗资源,直到超时。 通过使用 defer db.Close(),您可以确保在程序结束后立即关闭连接,而不管是否发生错误。