当前位置: 首页 > news >正文

Golang GORM系列:定义GORM模型及关系指南

使用GORM进行数据库管理的核心是定义模型的技能。模型是程序的面向对象结构和数据库的关系世界之间的纽带。本文深入研究了在GORM中创建成功模型的艺术,研究了如何设计结构化的Go结构,用标记注释字段,以及开发跨模型的链接,以便最大限度地发挥应用程序数据库交互的潜力。

在这里插入图片描述

在GORM中创建结构模型

良好定义的结构模型是基于gorm的应用程序的大脑。结构模型中的每个字段对应于数据库表中的一列,该列由结构模型表示。结构模型是这样制作的:

package modelsimport ("gorm.io/gorm"
)type User struct {gorm.ModelName  stringEmail string `gorm:"uniqueIndex"`Age   int
}

上面示例中, User struct 模型定义数据库表的列: ID, CreatedAt, UpdatedAt, DeletedAt, Name, Email, Age.

为字段映射添加标签

GORM依赖于结构体标记将结构体字段映射到数据库列。标签提供指导GORM进行数据库操作的元数据。常见标签包括:

  • gorm:"primaryKey": 标记字段为 primary key.
  • gorm:"uniqueIndex": 定义字段为唯一索引.
  • gorm:"not null": 标记字段不能为空.
  • gorm:"column:custom_name": 映射字段为自定义的名称.
type Product struct {gorm.ModelName     stringPrice    float64Category string `gorm:"column:item_category"`
}

在这个例子中,“Category”字段被映射到“item_category”列。

模型关联和关系

GORM擅长对表之间的复杂关系进行建模。关联定义了不同的模型如何相互关联,使您能够轻松地获取相关数据。

一对一的关系:

type User struct {gorm.ModelProfile Profile
}type Profile struct {gorm.ModelUserID  uintAddress string
}

在这个例子中,一个“User”对应一个“Profile”。‘ Profile ’结构中的‘ UserID ’字段用作外键。

一对多的关系:

type User struct {gorm.ModelOrders []Order
}type Order struct {gorm.ModelUserID  uintProduct string
}

在这里,一个“User”可以有多个“Order”,每个订单都通过“UserID”外键与用户相关联。

多对多关系:

// User 定义用户模型
type User struct {gorm.ModelName  stringRoles []Role `gorm:"many2many:user_roles;"`
}
// Role 定义角色模型
type Role struct {gorm.ModelName  stringUsers []User `gorm:"many2many:user_roles;"`
}

这个例子演示了“User”和“Role”模型之间的多对多关系。GORM处理中间表user_roles的创建。

在查询中使用关联

关联简化了对相关数据的查询。例如,获取用户的订单:

var user User
db.Preload("Orders").Find(&user, 1)

‘ Preload ’方法在查询结果中急切地加载用户的订单。

完整示例

多对多关系表示一个实体的多个实例可以关联到另一个实体的多个实例。在用户和角色的场景中,一个用户可以拥有多个角色,一个角色也可以被多个用户拥有。在数据库层面,通常需要一个中间表来维护这种关系。

1. 项目初始化

首先,确保你已经安装了 Go 和 GORM 库。可以使用以下命令初始化一个新的 Go 模块并安装 GORM:

go mod init example.com/user-role
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
2. 代码实现
package mainimport ("gorm.io/driver/sqlite""gorm.io/gorm"
)// User 定义用户模型
type User struct {gorm.ModelName  stringRoles []Role `gorm:"many2many:user_roles;"`
}// Role 定义角色模型
type Role struct {gorm.ModelName  stringUsers []User `gorm:"many2many:user_roles;"`
}func main() {// 连接数据库db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})if err != nil {panic("failed to connect database")}// 自动迁移模型db.AutoMigrate(&User{}, &Role{})// 创建角色adminRole := Role{Name: "Admin"}userRole := Role{Name: "User"}db.Create(&adminRole)db.Create(&userRole)// 创建用户user1 := User{Name: "Alice", Roles: []Role{adminRole, userRole}}user2 := User{Name: "Bob", Roles: []Role{userRole}}db.Create(&user1)db.Create(&user2)// 查询用户及其角色var users []Userdb.Preload("Roles").Find(&users)for _, user := range users {printUserWithRoles(user)}
}// printUserWithRoles 打印用户及其角色信息
func printUserWithRoles(user User) {print("User: ", user.Name, ", Roles: ")for _, role := range user.Roles {print(role.Name, " ")}println()
}
3. 代码解释
  • 模型定义
    • User 结构体和 Role 结构体分别表示用户和角色模型。每个结构体都嵌入了 gorm.Model,这是 GORM 提供的基础模型,包含 IDCreatedAtUpdatedAtDeletedAt 字段。
    • Roles 字段在 User 结构体中,Users 字段在 Role 结构体中,它们通过 gorm:"many2many:user_roles;" 标签指定了多对多关系,中间表名为 user_roles
  • 数据库操作
    • 使用 gorm.Open 方法连接到 SQLite 数据库。
    • db.AutoMigrate 方法用于自动创建数据库表结构。
    • 创建角色和用户,并将角色关联到用户。
    • 使用 db.Preload("Roles").Find(&users) 方法查询用户及其关联的角色。Preload("Roles"):这是 GORM 提供的预加载功能。预加载的目的是在查询主模型(这里是 User 模型)的同时,也将关联的模型(这里是 Role 模型)的数据一起查询出来,避免了 N + 1 查询问题。具体来说,Preload("Roles") 告诉 GORM 在查询用户时,同时查询每个用户关联的角色,并将这些角色数据填充到 User 结构体的 Roles 字段中。
  • 打印信息
    • printUserWithRoles 函数用于打印用户及其角色的信息。
4. 运行代码

将上述代码保存为 main.go,然后在终端中运行:

go run main.go

运行后,你将看到输出的用户及其角色信息,这表明多对多关系已经成功建立和查询。

5. 关联表增加额外字段

当需要给中间表 user_roles 增加额外字段(如 status)时,就不能单纯依靠 GORM 的 many2many 标签来处理多对多关系了,而是要手动定义中间表的模型,然后通过 has many 和 belongs to 关系来建立用户、角色和中间表之间的关联。以下是修改后的完整示例:

package mainimport ("gorm.io/driver/sqlite""gorm.io/gorm"
)// User 定义用户模型
type User struct {gorm.ModelName       stringUserRoles  []UserRoleRoles      []Role `gorm:"many2many:user_roles;foreignKey:ID;joinForeignKey:UserID;References:ID;joinReferences:RoleID"`
}// Role 定义角色模型
type Role struct {gorm.ModelName       stringUserRoles  []UserRoleUsers      []User `gorm:"many2many:user_roles;foreignKey:ID;joinForeignKey:RoleID;References:ID;joinReferences:UserID"`
}// UserRole 定义中间表模型
type UserRole struct {gorm.ModelUserID uintRoleID uintStatus string // 新增的额外字段
}func main() {// 连接数据库db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})if err != nil {panic("failed to connect database")}// 自动迁移模型db.AutoMigrate(&User{}, &Role{}, &UserRole{})// 创建角色adminRole := Role{Name: "Admin"}userRole := Role{Name: "User"}db.Create(&adminRole)db.Create(&userRole)// 创建用户user1 := User{Name: "Alice"}db.Create(&user1)// 关联用户和角色,并设置中间表的额外字段userRole1 := UserRole{UserID: user1.ID,RoleID: adminRole.ID,Status: "Active",}userRole2 := UserRole{UserID: user1.ID,RoleID: userRole.ID,Status: "Inactive",}db.Create(&userRole1)db.Create(&userRole2)// 查询用户及其角色var users []Userdb.Preload("UserRoles.Role").Find(&users)for _, user := range users {printUserWithRoles(user)}
}// printUserWithRoles 打印用户及其角色信息
func printUserWithRoles(user User) {print("User: ", user.Name, ", Roles: ")for _, userRole := range user.UserRoles {print(userRole.Role.Name, " (Status: ", userRole.Status, ") ")}println()
}
  • UserRole 结构体:这是手动定义的中间表模型,包含 UserIDRoleID 用于关联用户和角色,还新增了 Status 字段作为额外字段。
  • 关联用户和角色并设置额外字段:通过创建 UserRole 实例并设置 UserIDRoleIDStatus 字段,然后将其保存到数据库,完成用户和角色的关联并设置中间表的额外信息。

最后总结

在应用程序中高效管理数据库的关键是在GORM中定义模型。通过创建模型之间的关系、用相关标记注释字段以及构建有组织的结构模型,你为平滑的数据库交互构建了坚实的基础。GORM中的一对一、一对多和多对多关系处理使您能够轻松地为复杂的数据情况建模。结构良好的基础会产生可伸缩和可维护的应用程序,使你的数据库管理之旅变得简单而富有成效。

相关文章:

Golang GORM系列:定义GORM模型及关系指南

使用GORM进行数据库管理的核心是定义模型的技能。模型是程序的面向对象结构和数据库的关系世界之间的纽带。本文深入研究了在GORM中创建成功模型的艺术,研究了如何设计结构化的Go结构,用标记注释字段,以及开发跨模型的链接,以便最…...

ssm校园二手交易平台小程序

博主介绍:✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

【虚幻引擎UE】AOI算法介绍与实现案例

【虚幻引擎UE】AOI算法介绍与实现 一、AOI算法介绍AOI算法的典型应用场景二、AOI相关算法1. 边界框法(Bounding Box Method)2. 动态AOI算法3. 布尔运算(Boolean Operations)4. 四叉树(Quadtree)5. R树(R-Tree)6. 圆形AOI算法7. 网格分割(Grid Partitioning)8. 多边形…...

JavaScript 基础语法:变量、数据类型、运算符、条件语句、循环

JavaScript 是一种动态类型的脚本语言,广泛用于前端开发。以下是 JavaScript 基础语法的核心内容,包括变量、数据类型、运算符、条件语句和循环。 --- ### 1. 变量 变量用于存储数据。JavaScript 中有三种声明变量的方式: - **var**&…...

ASP.NET Core 如何使用 C# 从端点发出 GET 请求

使用 C#,从 REST API 端点获取 JSON;如何从 REST API 接收 JSON 数据。 本文需要 ASP .NET Core,并兼容 .NET Core 3.1、.NET 6和.NET 8。 要将数据发布到端点,请参阅本文。 使用 . 从端点发布 GET 数据非常容易HttpClient&…...

Docker 部署 MinIO | 国内阿里镜像

一、导读 Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口。可以很简单的和其他应用结合使用,例如 NodeJS、Redis、MySQL等。 二、…...

量化交易数据获取:xtquant库的高效应用

量化交易数据获取:xtquant库的高效应用 在量化交易领域,历史行情数据的重要性不言而喻。它不仅为策略回测提供基础,也是实时交易决策的重要参考。本文将介绍如何使用xtquant库来高效获取和处理历史行情数据。 技术背景与应用场景 对于量化…...

Mysql中存储引擎各种介绍以及应用场景、优缺点

概述 MySQL 提供了多种存储引擎,每种引擎有不同的特点和适用场景。以下是几种常见的 MySQL 存储引擎的详细介绍,包括它们的底层工作原理、优缺点,以及为什么 MySQL 默认选择某种引擎。 1. InnoDB 底层工作原理: 事务支持&#…...

面试题整理:Java虚拟机 JVM 内存区域、垃圾回收、类加载器

文章目录 JVM虚拟机内存区域1. ⭐JVM的内存区域有哪些?每个区域的作用是什么?2. 堆和栈的区别是什么?3. 堆内存是如何划分的?4. 永久代和元空间是什么关系?5. 对JVM常量池的理解?6. ⭐Java 对象的创建过程&…...

ASP.NET Core 使用 WebClient 从 URL 下载

本文使用 ASP .NET Core 3.1,但它在.NET 5、 .NET 6和.NET 8上也同样适用。如果使用较旧的.NET Framework,请参阅本文,不过,变化不大。 如果想要从 URL 下载任何数据类型,请参阅本文:HttpClient 使用WebC…...

第六届MathorCup高校数学建模挑战赛-A题:淡水养殖池塘水华发生及池水自净化研究

目录 摘要 1 问题的重述 2 问题的分析 2.1 问题一的分析 2.2 问题二的分析 2.3 问题三的分析 2.4 问题四的分析 2.5 问题五的分析 3. 问题的假设 4. 符号说明 5. 模型的建立与求解 5.1 问题一的建模与求解 5.1.1 分析对象与指标的选取 5.1.2 折线图分析 5.1.3 相关性分析 5.1.4…...

GnuTLS: 在 pull 函数中出错。 无法建立 SSL 连接。

提示信息 [root@localhost ~]# wget https://download.docker.com/linux/static/stable/x86_64/docker-27.5.1.tgz --2025-02-06 12:45:34-- https://download.docker.com/linux/static/stable/x86_64/docker-27.5.1.tgz 正在解析主机 download.docker.com (download.docker.…...

OpenAI 实战进阶教程 - 第十二节 : 多模态任务开发(文本、图像、音频)

适用读者与目标 适用读者:已经熟悉基础的 OpenAI API 调用方式,对文本生成或数据处理有一定经验的计算机从业人员。目标:在本节中,你将学会如何使用 OpenAI 提供的多模态接口(图像生成、语音转录等)开发更…...

《qt easy3d中添加孔洞填充》

《qt easy3d中添加孔洞填充》 效果展示一、创建流程二、核心代码效果展示 参考链接Easy3D开发——点云孔洞填充 一、创建流程 创建动作,并转到槽函数,并将动作放置菜单栏,可以参考前文 其中,槽函数on_actionHoleFill_triggered实现如下:...

windows蓝牙驱动开发-蓝牙常见问题解答

Windows 可以支持多少个蓝牙无线电? Windows 中的蓝牙堆栈仅支持一个蓝牙无线电。 此无线电必须符合蓝牙规范和最新的 Windows 硬件认证计划要求。 蓝牙和 Wi-Fi 无线电如何有效共存? 蓝牙和 Wi-Fi 无线电都在 2.4 GHz 频率范围内运行,因此…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_ssl_version 函数

定义 event\ngx_event_openssl.h 中: #if (OPENSSL_VERSION_NUMBER > 0x10100001L)#define ngx_ssl_version() OpenSSL_version(OPENSSL_VERSION)#else#define ngx_ssl_version() SSLeay_version(SSLEAY_VERSION)#endif #if (OPENSSL_VERSION_NUMBER…...

提示工程:少样本提示(Few-shot Prompting)

少样本提示(Few-shot Prompting)是一种利用大语言模型从少量示例样本中学习并处理任务的方法。它的核心思想是利用大语言模型的上下文学习能力,通过在提示中增加“示例样本”来启发大语言模型达到举一反三的效果。这种方法避免了重新训练或者…...

从量化投资到AI大模型:DeepSeek创始人梁文锋的创新之路

一、学术的启蒙:学霸的崭露头角 梁文锋的成长故事始于1985年,他出生在广东省湛江市的一个普通家庭。从小,梁文锋就展现出对知识的强烈渴望和非凡的学习能力,尤其在数学领域,他总是能够轻松解决复杂的难题,成为学校里备受瞩目的“学霸”。 2002年,年仅17岁的梁文锋以吴川…...

基于lstm+gru+transformer的电池寿命预测健康状态预测-完整数据代码

项目视频讲解: 毕业设计:基于lstm+gru+transformer的电池寿命预测 健康状态预测_哔哩哔哩_bilibili 数据: 实验结果:...

物品匹配问题-25寒假牛客C

登录—专业IT笔试面试备考平台_牛客网 这道题看似是在考察位运算,实则考察的是n个物品,每个物品有ai个,最多能够得到多少个物品的配对.观察题目可以得到,只有100,111,010,001(第一位是ci,第二位是ai,第三位是bi)需要进行操作,其它都是已经满足条件的对,可以假设对其中两个不同…...

Pyecharts系列课程05——散点图(Scatter)

本章我们学习Pyecharts中散点图的实现方法,散点图通常用于观察数据的分布和相关性。 1. 基础使用 散点图也是数据直角坐标系,与我们之前的直方图、折线图的基本用法是一致的。 示例: from pyecharts.charts import Scatterx_data [1, 2, …...

c/c++蓝桥杯经典编程题100道(18)括号匹配

括号匹配 ->返回c/c蓝桥杯经典编程题100道-目录 目录 括号匹配 一、题型解释 二、例题问题描述 三、C语言实现 解法1:栈匹配法(难度★) 解法2:计数器法(仅限单一括号类型,难度★☆) …...

C++病毒

免费版请关注作者&#xff0c;私信 第一期 声明&#xff1a; 仅供损害电脑&#xff0c;不得用于非法。 直接上代码 #include <bits/stdc.h> #include <windows.h> using namespace std; HHOOK g_hHook; LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LP…...

vue学习4

1.自定义创建项目 2.ESlint代码规范 正规的团队需要统一的编码风格 JavaScript Standard Style 规范说明&#xff1a;https://standardjs.com/rules-zhcn.html 规则中的一部分&#xff1a; (1)字符串使用单引号 ‘aabc’ (2)无分号 const name ‘zs’ (3)关键字后加空格 if(n…...

解锁 DeepSeek 模型高效部署密码:蓝耘平台深度剖析与实战应用

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

《DEADiff:一种具有解耦表示高效的风格化扩散模型》

paper&#xff1a;2403.06951 GitHub&#xff1a;bytedance/DEADiff: [CVPR 2024] Official implementation of "DEADiff: An Efficient Stylization Diffusion Model with Disentangled Representations" 目录 摘要 1、介绍 2、相关工作 2.1 扩散模型在文本到…...

webpack系统学习

webpack4和webpack5区别1---loader_webpack4与webpack5处理图片的不同-CSDN博客 webpack4和webpack5区别2---代码压缩_webpack4如何使用terser-CSDN博客 webpack4和webpack5区别3---缓存_cacheprune-CSDN博客 webpack4和webpack5区别4---自动清除打包目录_webpack4打包目录清…...

C++11新特性之unique_ptr智能指针

本节继续介绍智能指针&#xff0c;不了解的读者可以先阅读——C11新特性之shared_ptr智能指针-CSDN博客 1.介绍 unique_ptr是C11标准提供的另一种智能指针。与shared_ptr不同的是&#xff0c;unique_ptr指针指向的堆内存无法同其他unique_ptr共享&#xff0c;也就是每一片堆内…...

如何使用python制作一个天气预报系统

制作一个天气预报系统可以通过调用天气 API 来获取实时天气数据,并使用 Python 处理和展示这些数据。以下是一个完整的指南,包括代码实现和注意事项。 1. 选择天气 API 首先,需要选择一个提供天气数据的 API。常见的天气 API 有: OpenWeatherMap API:提供全球范围内的天…...

保姆级教程Docker部署Zookeeper模式的Kafka镜像

目录 一、安装Docker及可视化工具 二、Docker部署Zookeeper 三、单节点部署 1、创建挂载目录 2、运行Kafka容器 3、Compose运行Kafka容器 4、查看Kafka运行状态 5、验证生产消费 四、部署可视化工具 1、创建挂载目录 2、Compose运行Kafka-eagle容器 3、查看Kafka-e…...

在阿里云ECS上一键部署DeepSeek-R1

DeepSeek-R1 是一款开源模型&#xff0c;也提供了 API(接口)调用方式。据 DeepSeek介绍&#xff0c;DeepSeek-R1 后训练阶段大规模使用了强化学习技术&#xff0c;在只有极少标注数据的情况下提升了模型推理能力&#xff0c;该模型性能对标 OpenAl o1 正式版。DeepSeek-R1 推出…...

P3413 SAC#1 - 萌数

题目背景 本题由世界上最蒟蒻的 SOL 提供。 寂月城网站是完美信息教室的官网。地址:http://191.101.11.174/mgzd。 题目描述 蒟蒻 SOL 居然觉得数很萌! 好在在他眼里,并不是所有数都是萌的。只有满足“存在长度至少为 22 的回文子串”的数是萌的——也就是说,101 是萌…...

DeepSeek-R1系列01——技术报告解读:DeepSeek-R1:通过强化学习激励 LLM 中的推理能力

1.阅读目标 DeepSeek-R1 发布&#xff0c;性能对标 OpenAI o1 正式版 DeepSeek-R1已经发布&#xff0c;并同步开源模型权重。 DeepSeek-R1 遵循 MIT License&#xff0c;允许用户通过蒸馏技术借助 R1 训练其他模型。 DeepSeek-R1 上线API&#xff0c;对用户开放思维链输出&a…...

(1/100)每日小游戏平台系列

每日小游戏平台 项目简介以及地址 准备开发一个一百天小游戏平台&#xff0c;使用Flask构建的简单游戏导航网站&#xff0c;无需登录&#xff0c;让大家在返工的同时也可以愉快的摸鱼玩耍。 每天更新一个小游戏上传&#xff0c;看看能不能坚持一百天。 这些小游戏主要使用前端…...

前端布局与交互实现技巧

前端布局与交互实现技巧 1. 保持盒子在中间位置 在网页设计中&#xff0c;经常需要将某个元素居中显示。以下是一种常见的实现方式&#xff1a; HTML 结构 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><m…...

spark单机版本搭建

spark单机版本搭建 服务器配置 CPU内存磁盘操作系统内核版本2c2g40GCentOS 73.10.0 1.JDK 下载安装 # 列出版本 yum -y list java* # 安装 yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel # 检查 java -version2.spark下载 spark下载地址 本文下载&#x…...

【C++八股】std::atomic —— 原子操作

std::atomic 是 C11 引入的模板类&#xff0c;主要用于多线程编程中的原子操作&#xff0c;确保在多个线程访问或修改共享变量时不会产生数据竞争。 1. std::atomic 的作用 在多线程环境下&#xff0c;普通变量的操作不是原子的&#xff0c;可能被多个线程同时访问和修改&…...

GPU、CUDA 和 cuDNN 学习研究【笔记】

分享自己在入门显存优化时看过的一些关于 GPU 和 CUDA 和 cuDNN 的网络资料。 更多内容见&#xff1a; Ubuntu 22.04 LTS 安装 PyTorch CUDA 深度学习环境-CSDN博客CUDA 计算平台 & CUDA 兼容性【笔记】-CSDN博客 文章目录 GPUCUDACUDA Toolkit都包含什么&#xff1f;NVID…...

AI-学习路线图-PyTorch-我是土堆

1 需求 PyTorch深度学习快速入门教程&#xff08;绝对通俗易懂&#xff01;&#xff09;【小土堆】_哔哩哔哩_bilibili PyTorch 深度学习快速入门教程 配套资源 链接 视频教程 https://www.bilibili.com/video/BV1hE411t7RN/ 文字教程 https://blog.csdn.net/xiaotudui…...

Android Camera API 介绍

一 StreamConfigurationMap 1. StreamConfigurationMap 的作用 StreamConfigurationMap 是 Android Camera2 API 中的一个核心类&#xff0c;用于描述相机设备支持的输出流配置&#xff0c;包含以下信息&#xff1a; 支持的格式与分辨率&#xff1a;例如 YUV_420_888、JPEG、…...

活动预告 |【Part 1】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁

课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课&#xff0c;掌握创造新机遇所需的技能&#xff0c;加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动&#xff0c;了解如何更好地在 Microsoft 365 Defen…...

RabbitMQ 消息顺序性保证

方式一&#xff1a;Consumer设置exclusive 注意条件 作用于basic.consume不支持quorum queue 当同时有A、B两个消费者调用basic.consume方法消费&#xff0c;并将exclusive设置为true时&#xff0c;第二个消费者会抛出异常&#xff1a; com.rabbitmq.client.AlreadyClosedEx…...

web第二次作业

一.后台管理系统首页代码 1.html代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>实验&l…...

AI 编程开发插件codeium Windsurf(vscode、editor) 安装

1、vscode中安装&#xff1a; 2、vscode中使用 3、输入注册的账号密码&#xff0c;就可以使用。 4、或者直接下载editor 5、安装editor 下一步&#xff0c;下一步&#xff0c;直到安装成功&#xff0c;中间可以改下安装位置&#xff0c;如果C盘空间不够。 同样提示注册或者登录…...

变压器-000000

最近一个项目是木田12V的充电器&#xff0c;要设计变压器&#xff0c;输出是12V,电压大于1.5A12.6*1.518.9W. 也就是可以将变压器当成初级输入的一个负载。输入端18.9W. 那么功率UI 。因为变压器的输入是线性上升的&#xff0c;所以电压为二份之一&#xff0c;也就是1/2*功率…...

C# OpenCvSharp 部署MOWA:多合一图像扭曲模型

目录 说明 效果 项目 代码 下载 参考 C# OpenCvSharp 部署MOWA&#xff1a;多合一图像扭曲模型 说明 算法模型的paper名称是《MOWA: Multiple-in-One Image Warping Model》 ariv链接 https://arxiv.org/pdf/2404.10716 效果 Stitched Image 翻译成中文意思是&…...

Ai无限免费生成高质量ppt教程(deepseek+kimi)

第一步&#xff1a;打开deepseek官网&#xff08;DeepSeek) 1.如果deepseek官网网络繁忙&#xff0c;解决方案如下&#xff1a; (1)使用easychat官网&#xff08;EasyChat&#xff09;使用deepseek模型&#xff0c;如图所示&#xff1a; &#xff08;2&#xff09;本地部署&…...

LLMs之DeepSeek r1:Logic-RL的简介、安装和使用方法、案例应用之详细攻略

LLMs之DeepSeek r1&#xff1a;Logic-RL的简介、安装和使用方法、案例应用之详细攻略 目录 Logic-RL的简介 1、Logic-RL的特点 2、性能 Logic-RL 的安装和使用方法 1、安装 2、使用方法 数据准备 基础模型 指令模型 训练执行 实现细节 Logic-RL的案例应用 Logic-RL…...

解决跨域问题

相信大多数的伙伴在第一次通过vue spring 做项目的时候都会遇到这个问题 什么是同源策略和跨域问题 同源策略指的就是,浏览器出于安全考虑,实施的一种策略,即只允许来自同一源(即协议域名端口都相同)的请求访问资源. 否则就会导致跨域问题 例如: http://xxx.com -> http…...

网络工程师 (28)IEEE802标准

前言 IEEE 802标准是由电气和电子工程师协会&#xff08;IEEE&#xff09;制定的一组局域网&#xff08;LAN&#xff09;和城域网&#xff08;MAN&#xff09;标准&#xff0c;定义了网络中的物理层和数据链路层。 一、起源与背景 IEEE 802又称为LMSC&#xff08;LAN/MAN Stand…...