广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Go语言中GORM存取数组/自定义类型数据
  • 635
分享到

Go语言中GORM存取数组/自定义类型数据

Gorm 数组字段处理gorm 数组gorm 自定义类型 2023-01-17 12:01:38 635人浏览 独家记忆
摘要

目录GORM存取数组类型数据一、GoRM的自定义类型1. Scanner/Valuer接口2. 数组变量3. 测试二、实际生产​总结GORM存取数组类型数据 在GORM不支持数组类型

GORM存取数组类型数据

GORM不支持数组类型变量数据的存取,可以通过GROM的自定义数据类型实现。

一、GORM的自定义类型

1. Scanner/Valuer接口

GORM的自定义的数据类型必须实现Scanner/Valuer接口。

(1) Scanner接口的Scan方法,是从数据库读取数据到Go变量时需要进行的解析处理,与解码的过程类型。

(2) Valuer接口的Value方法,是将Go变量存到数据库时进行编码处理。

2. 数组变量

​ 虽然GORM不支持数组变量,但是可以通过实现Scanner/Valuer接口,在数据库取/存时进行类似解码/编码的处理,使数组变量成为数据库可支持的变量类型。

(1) 实现Sacnner接口

Scan函数,从数据库读取数据后,对其进行处理,然后获得Go类型的变量。

type Strs []string

func (m *Strs) Scan(val interface{}) error {
	s := val.([]uint8)
	ss := strings.Split(string(s), "|")
	*m = ss
	return nil
}

如上自定义Strs类型,底层类型未字符串数组。Scan函数将读取的val值,按照字符串处理,以"|"为分隔符进行切割,获得字符串数组类型,然后使用指针赋值。

(2) 实现Valuer接口

Value函数,将数据存到数据库时,对数据进行处理,获得数据库支持的类型。

func (m Strs) Value() (driver.Value, error) {
	str := strings.Join(m, "|")
	return str, nil
}

如上将Strs存入数据库前,将数组内的字符串用"|"拼接,获得数据库支持的string类型后再存入数据库。

3. 测试

定义如下函数进行测试

(1) 模型变量

type User struct {
	ID   uint `gorm:"primary_key"`
	Name string
	Pics Strs `gorm:"type:longtext"`  // 自定义的数组类型,在数据库中存为长文本类型
}

​ (2) Service函数

func SaveUser(user User) error {
	var err error
	err = db.Save(&user).Error
	return err
}

func GetUser(name string) (User, error) {
	var user User
	err := db.First(&user, "name = ?", name).Error
	return user, err
}

​ (3) testService函数

func TestSaveUser() {
   user := User{
      Name: "Jason",
      Pics: Strs{
         "123124",
         "gtsrbxrzsfcv",
      },
   }
   err := SaveUser(user)
   if err != nil {
      log.Panicln("保存失败!", err)
   } else {
      log.Println("保存成功!")
   }
}

func TestGetUser() {
   user, err := GetUser("Jason")
   if err != nil {
      log.Panicln("获取失败!", err)
   } else {
      log.Println("获取成功!", user)
   }
}

​ (4) 运行结果

2022/07/30 18:18:41 保存成功!
2022/07/30 18:18:41 获取成功! {3 Jason [123124 gtsrbxrzsfcv]}

在数据库存储中体现为:

Mysql> select *from users;
+----+-------+---------------------+
| id | name  | pics                |
+----+-------+---------------------+
|  3 | Jason | 123124|gtsrbxrzsfcv |
+----+-------+---------------------+
1 row in set (0.00 sec)

二、实际生产

上面的例子中展示了Scanner/Valuer接口的简单使用,实际生产中将数组类型转换为JSON字符串进行保存,下面展示一个完整的例子,以一个User拥有一张包含信息的银行卡为例(当然可以通过一对一关联4444实现)。

(1) 实现自定义类型

type User struct {
   ID    uint `gorm:"primary_key"`
   Name  string
   Cards Card `gorm:"json"`
}

type Card struct {  // 指定json的Tag。
   Type     int    `json:"type"`
   Account  string `json:"account"`
   PassWord string `json:"password"`
}

// Scan 解码json字符串
func (card *Card) Scan(val interface{}) error {
   b, _ := val.([]byte)
   return json.Unmarshal(b, card)
}

// Value 编码json
func (card Card) Value() (value driver.Value, err error) {
	return json.Marshal(card)
}

​ (2) 数据表模型

type User struct {
   ID    uint `gorm:"primary_key"`
   Name  string
   Cards Card `gorm:"json"`  // 指定为json类型
}

​总结

到此这篇关于Go语言中GORM存取数组/自定义类型数据的文章就介绍到这了,更多相关GORM存取数组 自定义类型数据内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Go语言中GORM存取数组/自定义类型数据

本文链接: https://www.lsjlt.com/news/177952.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言中GORM存取数组/自定义类型数据
    目录GORM存取数组类型数据一、GORM的自定义类型1. Scanner/Valuer接口2. 数组变量3. 测试二、实际生产​总结GORM存取数组类型数据 在GORM不支持数组类型...
    99+
    2023-01-17
    Gorm 数组字段处理 gorm 数组 gorm 自定义类型
  • 易语言如何自定义数据类型数组
    在易语言中,可以通过使用结构体来自定义数据类型数组。首先,需要创建一个结构体,定义数组的元素类型和个数。例如,如果想要创建一个包含整...
    99+
    2023-08-17
    易语言
  • Go语言中的自定义类型你了解吗
    目录1. 什么是自定义类型2. 如何定义自定义类型3. 自定义类型的方法4. 自定义类型的嵌入和组合5. 自定义类型的值接收者和指针接收者6. 自定义类型的类型方法7. 总结注:本篇...
    99+
    2023-05-18
    Go自定义类型使用 Go自定义类型原理 Go自定义类型
  • Go语言的数据类型及数组有哪些
    今天小编给大家分享一下Go语言的数据类型及数组有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Go语言身世简介Go(又称...
    99+
    2023-07-04
  • Go语言中类型别名和自定义类型的示例分析
    这篇文章主要介绍Go语言中类型别名和自定义类型的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Go语言中没有类的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构...
    99+
    2022-10-19
  • GO 语言:如何定义实时关键字的数据类型?
    在计算机科学中,实时关键字是指在特定时间内非常重要的数据,比如股票市场数据、气象数据、交通数据等。这些数据需要及时地被处理和分析,以便及时地做出决策。GO 语言是一种非常适合处理实时关键字的语言,本文将介绍如何定义实时关键字的数据类型。 ...
    99+
    2023-08-12
    实时 关键字 数据类型
  • Java动态数组Arraylist存放自定义数据类型方式
    目录Java动态数组Arraylist存放自定义数据类型自定义一个动态数组ArrayList,加深对动态数组的理解Java动态数组Arraylist存放自定义数据类型 class...
    99+
    2022-11-12
  • 如何使用GO语言存储数据类型?
    GO语言是一种非常流行的开发语言,它的速度非常快,可以用于开发高性能应用程序。但是,GO语言的强大并不仅限于速度,它还有很多其他的特性,比如存储数据类型。在本文中,我们将介绍如何使用GO语言存储不同类型的数据,并提供一些实际的演示代码。 一...
    99+
    2023-11-12
    数据类型 存储 javascript
  • go语言中数据类型有哪些
    这篇文章将为大家详细讲解有关go语言中数据类型有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。go语言的数据类型有:1、布尔型;2、数值类型(可分为整型和浮点型);3、字符串类型;4、指...
    99+
    2023-06-15
  • C语言深入了解自定义数据类型的使用
    目录一、自定义数据类型(上)二、自定义数据类型(中)​​​​​三、自定义数据类型(下)​​​​​一、自定义数据类型(上) 类型命名关键字 (typedef) C语言中可以对类型赋予新...
    99+
    2022-11-13
  • GO语言中的数据类型是否支持缓存?
    Go语言是一种静态类型、编译型的语言,它的数据类型支持缓存。缓存是指将一部分数据临时保存在计算机的内存中,以便快速访问。在Go语言中,缓存是通过使用内置的map类型来实现的。 Map是Go语言中的一种关联数组,它将键映射到值。在Go语言中...
    99+
    2023-11-13
    数据类型 缓存 javascript
  • 如何在自然语言处理中使用 GO 语言的数据类型?
    自然语言处理(Natural Language Processing, NLP)是人工智能领域的一个重要分支,它旨在让计算机能够理解和处理人类语言。在NLP中,数据类型是非常重要的,因为它们可以帮助我们更好地组织和处理数据。本文将介绍如何在...
    99+
    2023-10-30
    数据类型 自然语言处理 load
  • Go语言中的数据类型有哪些?
    作为一门现代的编程语言,Go语言提供了多种数据类型来支持不同的编程需求。本文将对Go语言中常见的数据类型进行介绍,并附上演示代码。 布尔型(bool) 布尔型数据类型只有两个值:true和false。在Go语言中,布尔型通常用于条件判...
    99+
    2023-08-13
    数据类型 教程 函数
  • C语言中sizeof与整型数据存储及数据类型取值范围
    这篇文章主要讲解了“C语言中sizeof与整型数据存储及数据类型取值范围”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中sizeof与整型数据存储及数据类型取值范围”吧!1.关键字si...
    99+
    2023-07-02
  • 详解Go语言中的数据类型及类型转换
    目录1、基本数据类型2、基础数据类型转换3、基本数据类型转为字符串4、strconv的使用5、字符串转为基础类型1、基本数据类型 数据类型有很多,先研究一下基础的,例如:布尔型、数字...
    99+
    2022-11-13
  • 如何使用 GO 语言的数据类型来处理自然语言?
    GO 语言是一种开源的编程语言,它具有高效性、可靠性、可扩展性等优点,目前在互联网领域得到了广泛的应用。在自然语言处理方面,GO 语言提供了丰富的数据类型和操作方法,可以帮助开发者轻松地处理文本数据。本文将介绍如何使用 GO 语言的数据类型...
    99+
    2023-10-30
    数据类型 自然语言处理 load
  • SQL语句中的DDL类型的数据库定义语言操作
    目录SQL语句之DDL类型的数据库定义语言1.DDL类型的SQL语句基本概述2.DDL类型的SQL语句之数据库层面的操作2.1.创建一个数据库2.2.查看mysql中有哪些数据库2.3.进入某个数据库2.4.查看当前处于...
    99+
    2022-08-09
    SQL DDL数据库定义语言 SQL数据库定义语言
  • GO 语言中的数据类型对自然语言处理有什么影响?
    自然语言处理(NLP)是人工智能领域中的重要研究方向之一,它涉及到语言模型、词向量、句法分析、情感分析等多个方面。在 NLP 中,数据类型对于算法的效率和精度有着极为重要的影响,而 GO 语言作为一门具有高效性和简洁性的编程语言,对于 N...
    99+
    2023-10-30
    数据类型 自然语言处理 load
  • 异步编程中如何处理Go语言中的数组数据类型?
    异步编程已经成为了现代编程的一个重要组成部分,它可以大大提高程序的性能和响应速度。在Go语言中,数组是一种非常重要的数据类型,但是在异步编程中,我们需要特别注意如何处理数组数据类型。本文将介绍在异步编程中如何处理Go语言中的数组数据类型。 ...
    99+
    2023-08-08
    异步编程 数据类型 数组
  • 数据类型在Go语言中有哪些常见的类型?
    Go语言是一种快速、简洁、安全的编程语言,它的强类型系统和丰富的数据类型使其成为了一种非常流行的编程语言。在Go语言中,常见的数据类型有哪些呢?本文将详细介绍Go语言中常见的数据类型。 一、基本数据类型 布尔型(bool) 布尔型只有两...
    99+
    2023-08-05
    对象 接口 数据类型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作