• 「go查漏补缺」命名规则以及 GROM 结构体的应用


    概述:

    在学习GORM过程中,总是在调用结构体和文件导入这里出错,所以整理了以下文档用于梳理变量/结构体命名规则import导入的知识点

    一、变量/结构体命名规则

    变量/结构体都遵守同样的命名规则:可见性由首字母大小写决定

    • 大写首字母:公开的(可导出的)其他包可以访问它。

    • 小写首字母:私有的(不可导出的) 只能在定义它的包内部访问

      命名变量
      变量命名应遵循Go的命名惯例,一般使用驼峰式命名法。局部变量通常使用小写字母开头(user),而导出的结构体使用大写开头(User)。这样命名后,你可以直接使用包名加类型名的方式在其他包中引用这些类型或函数。

    附录 基本规则

    小驼峰 aVar:局部变量(包括函数参数)
    大驼峰 AndVar:导出的变量/结构体、类型、函数、方法等

    二、GROM实际案例

    下面是如何在main.go中导入并使用/models包中的User结构体的具体步骤:

    1、定义User结构体

    假设有一个(位于/models/user.go)文件,其中定义了User结构体:

     注:这里因为User是大写的,表明是可以导出的
    
    • 1
    // 文件路径: /models/user.go
    package models
    
    type User struct {
        Name string
        Age  int
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2、 在main.go中导入User结构体,以及对应的操作

    在main.go中,你可以这样导入并使用User结构体:
    ···

    package main
    
    import (
        "fmt"
        "your-module-name/models" // 替换成自己的模块名
    )
    
    func main() {
        var user models.User
        user.Name = "Alice"
        user.Age = 30
        fmt.Println(user)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    总结

    在main.go中使用models包中的User结构体,你需要先导入models包,然后使用models.User来创建User实例。确保User结构体是导出的(即首字母大写),这样才能在包外部访问它。

    三、结构体中的公开和私有字段

    //path:/models/user.go
    type User struct {
        Name string  // 公开字段
        age  int     // 私有字段
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    公开和私有字段类似 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)//错误
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    四、GORM中的gorm.Model和自动迁移功能

    1 gorm.Model、

    //path:/models/user.go
    type User struct {
    	gorm.Model
    	Username string
    	Password string
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    User结构体包含嵌入字段gorm.Model:一个嵌入式基础模型,GORM会自动为你的数据库表添加y一些基础字段:

    1. ID:唯一标识符,主键
    2. CreatedAt:被创建的时间
    3. UpdatedAt:最后一次更新的时间
    4. DeletedAt:被删除的时间,用于支持软删除(标记为删除而非DB实际删除)

    3、 GORM自动迁移技术

    GORM自动迁移功能:根据go程序中定义的结构体创建对应的数据库表

    	//连接数据库
    	db, err := gorm.Open(sqlite.Open("gotest1.db"), &gorm.Config{})
    	//使用Gorm自动迁移功能
    	db.AutoMigrate(&models.User{})
    
    • 1
    • 2
    • 3
    • 4

    4、硬删除和软删除

    • 硬删除:实际地从数据库删除
    • 软删除:没有实际擅长,只是设置DeletedAt为当前时间,标记为已删,在查询中会被GORM忽略
  • 相关阅读:
    刚刚:2023阿里云双十一优惠活动上线了!
    使用Docker搭建分布式文件存储系统MinIO
    Nuxt 菜鸟入门学习笔记五:CSS 样式
    【校招VIP】前端计算机网络之UDP相关
    超级菜鸟怎么学习数据分析?
    什么是Executors框架?
    java 代理模式(静态代理、动态代理、JDK动态代理、CGLIB动态代理)详解
    unity-内存GC
    Gradle系列——Gradle的build.gradle文件详情,项目发布(基于Gradle文档7.5)day3-3
    深度剖析 —— 预处理
  • 原文地址:https://blog.csdn.net/weixin_67225910/article/details/134509079