「go查漏补缺」命名规则以及 GROM 结构体的应用
概述:
在学习GORM过程中,总是在调用结构体和文件导入这里出错,所以整理了以下文档用于梳理变量/结构体命名规则和import导入的知识点
一、变量/结构体命名规则
变量/结构体都遵守同样的命名规则:可见性由首字母大小写决定
-
大写首字母:公开的(可导出的)其他包可以访问它。
-
小写首字母:私有的(不可导出的) 只能在定义它的包内部访问
命名变量
变量命名应遵循Go的命名惯例,一般使用驼峰式命名法。局部变量通常使用小写字母开头(user),而导出的结构体使用大写开头(User)。这样命名后,你可以直接使用包名加类型名的方式在其他包中引用这些类型或函数。
附录 基本规则
小驼峰 aVar:局部变量(包括函数参数)
大驼峰 AndVar:导出的变量/结构体、类型、函数、方法等
二、GROM实际案例
下面是如何在main.go中导入并使用/models包中的User结构体的具体步骤:
1、定义User结构体
假设有一个(位于/models/user.go)文件,其中定义了User结构体:
注:这里因为User是大写的,表明是可以导出的
// 文件路径: /models/user.go
package modelstype User struct {Name stringAge int
}
2、 在main.go中导入User结构体,以及对应的操作
在main.go中,你可以这样导入并使用User结构体:
···
package mainimport ("fmt""your-module-name/models" // 替换成自己的模块名
)func main() {var user models.Useruser.Name = "Alice"user.Age = 30fmt.Println(user)
}
总结
在main.go中使用models包中的User结构体,你需要先导入models包,然后使用models.User来创建User实例。确保User结构体是导出的(即首字母大写),这样才能在包外部访问它。
三、结构体中的公开和私有字段
//path:/models/user.go
type User struct {Name string // 公开字段age int // 私有字段
}
公开和私有字段类似 java对象 的public和private属性:
公开字段:能自由地读取和修改值
私有字段:不能直接读取或修改值
//path:main.go
func main() {user := models.User{Name: "Alice"}user.Name = "Bob" // 可以修改,因为 Name 是公有字段// user.age = 30 // 编译错误,不能修改,因为 age 是私有字段fmt.Println(user.Name)//fmt.Println(user.age)//错误
}
四、GORM中的gorm.Model和自动迁移功能
1 gorm.Model、
//path:/models/user.go
type User struct {gorm.ModelUsername stringPassword string
}
User结构体包含嵌入字段gorm.Model:一个嵌入式基础模型,GORM会自动为你的数据库表添加y一些基础字段:
- ID:唯一标识符,主键
- CreatedAt:被创建的时间
- UpdatedAt:最后一次更新的时间
- DeletedAt:被删除的时间,用于支持
软删除(标记为删除而非DB实际删除)
3、 GORM自动迁移技术
GORM自动迁移功能:根据go程序中定义的结构体创建对应的数据库表
//连接数据库db, err := gorm.Open(sqlite.Open("gotest1.db"), &gorm.Config{})//使用Gorm自动迁移功能db.AutoMigrate(&models.User{})
4、硬删除和软删除
- 硬删除:实际地从数据库删除
- 软删除:没有实际擅长,只是设置DeletedAt为当前时间,标记为已删,在查询中会被GORM忽略
相关文章:
「go查漏补缺」命名规则以及 GROM 结构体的应用
概述: 在学习GORM过程中,总是在调用结构体和文件导入这里出错,所以整理了以下文档用于梳理变量/结构体命名规则和import导入的知识点 一、变量/结构体命名规则 变量/结构体都遵守同样的命名规则:可见性由首字母大小写决定 大写…...
Django 集成 Celery 实现高效的异步任务处理
概要 在复杂的 Web 应用中,处理长时间运行的任务或定期任务是一项挑战。Django 作为一个强大的 Python Web 框架,可以通过集成 Celery 这一异步任务队列来优化这些任务的处理。Celery 不仅能提高应用性能,还能改善用户体验。本文将深入探讨如…...
Java之异常(上):基本异常体系
一、背景引入: Java中的异常是指:Java程序在运行时可能出现的错误或非正常情况。例如:在程序中试图打开一个根本不存在的文件,在程序中除0等。异常是否出现:通常取决于程序的输入、程序中对象的当前状态以及程序所处的…...
你的关联申请已发起,请等待企业微信的管理员确认你的申请
微信支付对接时,需要申请AppID,具体在下面的位置: 关联AppID,发起申请时,会提示这么一句话: 此时需要登录企业微信网页版,使用注册人的企业微信扫码登录进去,然后按照下面的步骤操作即可。 点击…...
.nvmrc 文件使用详解
文章目录 1. 前言2. .nvmrc 是什么3. 创建 .nvmrc 文件4. 使用 .nvmrc 文件5. 终端自动切换版本 1. 前言 当开发多个项目时,每个项目运行环境要求的 node 版本不一样,那么我们就需要给每个项目指定 node 版本,也就是通过终端执行 nvm install…...
深度学习之基于YoloV5抽烟检测系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于YOLOv5(You Only Look Once)的抽烟检测系统可以用于实时检测图像或视频中是否存在抽烟行…...
解释器模式 (Interpreter Pattern)
定义 解释器模式(Interpreter Pattern)是一种行为型设计模式,用于定义一种语言的语法表示,并提供一个解释器来处理这种语法。这种模式用于实现语言解释器,通常用于专业领域或复杂文本处理中。在解释器模式中ÿ…...
【bug】uniapp的image组件渲染gif图,只有第一次点击的时候有动效,需要每次点击都有gif效果,已解决
前两天遇到的问题,暂时没有解决,就搁置了。 不解决又难受,还好今天解决了,记录下 需求: 两个gif图,分别代表点击之后的男生和女生,并且有两个静态的男生和女生图片 当男生静态图被点击的时候切…...
ubuntu编译sqlite3并使用
SQLite3是一种轻量级的关系型数据库管理系统,它是在C语言基础上实现的。SQLite3具有许多优点,例如: 1.灵活:它可以在多种操作系统上运行,并且可以将多个数据库文件合并成一个文件。 2.易于使用:SQLite3使用…...
【OpenCV+OCR】计算机视觉:识别图像验证码中指定颜色文字
文章目录 1. 写在前面2. 读取验证码图像3. 生成颜色掩码4. 生成黑白结果图5. OCR文字识别6. 测试结果 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【…...
【ROS 2 进阶-MoveIt!】MoveIt!中的关键节点
所有内容请查看:博客学习目录_Howe_xixi的博客-CSDN博客 原文档链接:Docs...
-bash: jps: command not found
背景 服务器的jdk通过yum 安装的,要用jps查询pid,提示找不到命令 yum install -y java-1.8.0-openjdk.x86_64 一、jps命令无法找到 [devhgh-tob-hsbc-dev-003 ~]$ jps -bash: jps: command not found 二、检查基础Java环境 [devhgh-tob-hsbc-dev-003 ~]…...
[CLickhouse] 学习小计
1.建表 正常按照如下语句进行建表,但会报错说缺少ORDER BY 或 PRIMARY KEY CREATE TABLE omds.a (x String COMMENT ,y String COMMENT ,z String ) ENGINE MergeTree(); 若我们仅需建一个没有主键的表,直接使用如下建表语句即可: CREATE…...
一款非常优秀的项目管理工具:进度猫(推荐)
在项目管理中,一个好的工具可以极大地提高效率。 进度猫是一款非常优秀的项目管理工具。它具有非常强大的功能,可以帮助团队更好地管理项目进度。 通过可视化的方式,将项目进度、任务分配、需求变更等全面呈现给团队成员,让团队…...
Bert学习笔记(简单入门版)
目 录 一、基础架构 二、输入部分 三、预训练:MLMNSP 3.1 MLM:掩码语言模型 3.1.1 mask模型缺点 3.1.2 mask的概率问题 3.1.3 mask代码实践 3.2 NSP 四、如何微调Bert 五、如何提升BERT下游任务表现 5.1 一般做法 5.2 如何在相同领域数据中进…...
信号功率放大器的工作原理和特点是什么
信号功率放大器是一种电子设备,用于将输入信号的功率进行放大,以达到所需的输出功率水平。它在各个领域中都有广泛的应用,包括音频放大器、射频放大器、激光功率放大器等。下面将详细介绍信号功率放大器的工作原理和特点。 工作原理ÿ…...
基于go标准分层架构项目设计实现
基于go标准分层架构项目设计实现 缘起 个人博客网址 最近主要看了两方面知识,一方面是技术相关的,如何设计一个比较好的后端架构项目代码;一方面是非技术相关的,如何写一篇好的技术文章,能够让他人读懂并有收获。因…...
原理Redis-IntSet
IntSet IntSet是Redis中set集合的一种实现方式,基于整数数组来实现,并且具备长度可变、有序等特征。 结构如下: typedef struct intset {uint32_t encoding; /* 编码方式,支持存放16位、32位、64位整数*/uint32_t length; /* 元素…...
逸学java【初级菜鸟篇】9.3 Stream流
hi,我是逸尘,一起学java吧 得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念(就是都基本使用lambda的形式)。 流处理 我们首先理解什么是流处理,它类似于sql语句,可以执行非常复…...
html页面直接使用elementui Plus时间线 + vue3
直接上效果图 案例源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"../js/vue3.3.8/vue.global.js"></script><link rel"styles…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
