go gorm创建记录

这篇具有很好参考价值的文章主要介绍了go gorm创建记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 创建model
package mysqltest

import (
	"errors"
	"fmt"

	"gorm.io/gorm"
)

type Product struct {
	gorm.Model
	ID    uint    `gorm:"primarykey"`
	Name  string  `gorm:"column:name"`
	Price float64 `gorm:"column:price_value"`
	Test  string  `gorm:"-"`
}

type Tabler interface {
	TableName() string
}

// 修改表名
func (recv Product) TableName() string {
	return "product"
}

// 钩子
func (recv *Product) BeforeCreate(tx *gorm.DB) (err error) {
	if recv.Name == "haha" {
		fmt.Println("不合法哈")
		return errors.New("不合法哈")
	} else {
		return nil
	}
}

  1. dbhelper
package mysqltest

import (
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/clause"
)

var db *gorm.DB

func Initdb() {
	dsn := "ellis:ellis@tcp(192.168.214.134:3306)/go_db?charset=utf8mb4&parseTime=True&loc=Local"
	var err error
	db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic(err)
	}
}

func Create(value interface{}) {
	d := db.Create(value)
	fmt.Printf("d.RowsAffected: %v\n", d.RowsAffected)
}

func InitTable(table interface{}) {
	db.AutoMigrate(table)
}

// 根据选择的字段插入
func CreateBySelectFields(fields []string, value interface{}) {
	db.Select(fields).Create(value)
}

// 批量插入
func CreateMulti(value interface{}) {
	d := db.Create(value)
	fmt.Printf("d.RowsAffected: %v\n", d.RowsAffected)
}

// 批量插入
func CreateBatch(value interface{}) {
	d := db.CreateInBatches(value, 100)
	fmt.Printf("d.RowsAffected: %v\n", d.RowsAffected)
}

// 忽略钩子
func CreateIgnoreHook(value interface{}) {
	db.Session(&gorm.Session{SkipHooks: true}).Create(value)
}

// 通过map创建
func CreateByMap(value map[string]interface{}, model interface{}) {
	db.Model(model).Create(value)
}

// 冲突啥也不做
func DoNothingWhenInsert(value interface{}) {
	db.Clauses(clause.OnConflict{DoNothing: true}).Create(value)
}

  1. main
package main

import (
	"ellis/mysqltest"
	"fmt"
)

func main() {
	mysqltest.Initdb()
	// 创建数据库
	mysqltest.InitTable(&mysqltest.Product{})
	// 添加单个数据
	mysqltest.Create(&mysqltest.Product{Name: "dafault"})
	// 添加数据忽略钩子
	mysqltest.CreateIgnoreHook(&mysqltest.Product{Name: "haha", Price: 100})

	// 选择字段进行插入
	var value *mysqltest.Product = &mysqltest.Product{Name: "twofield", Price: 100}
	mysqltest.CreateBySelectFields([]string{"Name", "Price"}, value)
	fmt.Printf("value: %v\n", value)

	// 批量插入
	var value1 []mysqltest.Product = []mysqltest.Product{mysqltest.Product{Name: "h1", Price: 1}, mysqltest.Product{Name: "h2", Price: 2}}
	mysqltest.CreateMulti(value1)
	fmt.Printf("value: %v\n", value1)

	// 批量插入
	var value3 []mysqltest.Product = []mysqltest.Product{mysqltest.Product{Name: "h1", Price: 1}, mysqltest.Product{Name: "h2", Price: 2}}
	mysqltest.CreateBatch(value3)
	fmt.Printf("value: %v\n", value3)
	// 通过map创建
	mysqltest.CreateByMap(map[string]interface{}{"Name": "ellis", "Price": "30000"}, mysqltest.Product{})
	// 冲突donothing
	mysqltest.DoNothingWhenInsert(&mysqltest.Product{ID: 1, Name: "ellis"})

}

参考文章来源地址https://www.toymoban.com/news/detail-666345.html

到了这里,关于go gorm创建记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【链路追踪】「Go语言」OpenTelemetry实现[gin, gRPC, log, gorm, redis]的集成

    OpenTelemetry中文文档:https://github.com/open-telemetry/docs-cn/blob/main/OT.md 之前用的是jaeger实现链路追踪,但是想要换成Zipkin等框架或集成指标监控或集成日志会换框架很麻烦。 OpenTracing制定了一套平台无关、厂商无关的协议标准,使得开发人员能够方便的添加或更换底层APM的实现。

    2024年02月06日
    浏览(39)
  • golang导入go-git错误记录

    代码: 导入: 编译,报错: 解决: 替换引用。 ref: https://github.com/src-d/go-git/issues/914

    2024年01月22日
    浏览(55)
  • Golang:Go语言结构

    在我们开始学习 Go 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构。 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 表达式 注释 接下来让我们来看下简单的代码,该代码输出了\\\"Hello World!\\\": 让我们来看下以上程序的各个部分: 第一

    2024年02月10日
    浏览(58)
  • 【Golang】三分钟让你快速了解Go语言&为什么我们需要Go语言?

    博主简介: 努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。 博主主页: @是瑶瑶子啦 所属专栏: Go语言核心编程 近期目标: 写好专栏的每一篇文章 Go 语言从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关

    2023年04月21日
    浏览(60)
  • Go语言(Golang)数据库编程

    要想连接到 SQL 数据库,首先需要加载目标数据库的驱动,驱动里面包含着于该数据库交互的逻辑。 sql.Open() 数据库驱动的名称 数据源名称 得到一个指向 sql.DB 这个 struct 的指针 sql.DB 是用来操作数据库的,它代表了0个或者多个底层连接的池,这些连接由sql 包来维护,sql 包会

    2024年02月03日
    浏览(88)
  • 【GoLang】MAC安装Go语言环境

    小试牛刀 首先安装VScode软件 或者pycharm mac安装brew软件  brew install go 报了一个错误 不提供这个支持  重新brew install go 之后又重新brew reinstall go 使用go version 可以看到go 的版本 使用go env  可以看到go安装后的配置 配置一个环境变量 vim ~/.zshrc,  

    2024年02月15日
    浏览(57)
  • 【Golang】VScode配置Go语言环境

    安装VScode请参考我的上一篇博客:VScode安装_㫪548的博客-CSDN博客 接下来我们直接进入正题: Go语言(又称Golang)是一种开源的编程语言,由Google开发并于2009年首次发布。Go语言具有简洁、高效、可靠和易于阅读的特点,被设计用于解决大型项目的开发需求。它结合了静态类型

    2024年02月03日
    浏览(65)
  • Golang区块链钱包_go语言钱包

    Golang区块链钱包的特点 Golang区块链钱包具有以下几个特点: 1. 高性能 Golang是一种编译型语言,具有快速的执行速度和较低的内存消耗。这使得Golang区块链钱包在处理大规模交易数据时表现出色,能够满足高性能的需求。 2. 并发支持 Golang内置了轻量级线程——goroutine,以及

    2024年04月15日
    浏览(61)
  • 【GoLang】哪些大公司正在使用Go语言

    前言: 随着计算机科学和软件开发的快速发展,编程语言的选择变得愈加关键。 在这个多元化的编程语境中,Go语言(简称Golang)以其简洁、高效、并发处理能力等特性逐渐受到业界关注。 越来越多的大型科技公司纷纷采用Go语言作为其软件开发的首选语言,这种趋势反映了

    2024年02月04日
    浏览(64)
  • Golang(Go语言)IP地址转换函数

    String形式的IP地址和Int类型互转函数 代码 输出如下:  

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包