gorm

【技术教程】RTMP协议视频直播点播平台EasyDSS内Go语言使用反射优化代码技巧说明

﹥>﹥吖頭↗ 提交于 2020-11-07 11:55:42
在开发 EasyDSS 项目中,随着功能的扩大,慢慢的发现有很多类似的代码存在于代码中。因为结构体的不同,使用相同的函数进行合并非常困难,使用反射就可以将这些代码合并。 代码量越少,出现 bug 的概率则越低,因此对于相似的函数最好进行合并,用来降低代码量。以下文章中介绍如何使用反射来将部分代码合并的技巧。 首先需要了解什么是反射。在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。但在 Go 语言中并未完全实现反射的所有功能, Go 语言提供了一种机制在运行时更新变量和检查它们的值、调用它们的方法,但是在编译时并不知道这些变量的具体类型,这称为反射机制。 以下代码为判断一个用户为id的数据在数据库中是否存在的功能。 func (impl *BaseDaoImpl) Exists0(id string) error { data := table.User{} return impl.fromTable().First(&data, impl.WherePrimaryKey, id).Error } 判断日志是否存在的功能 func (impl *BaseDaoImpl) Exists1(id string) error { data := table

3、GROM 关联 (golang)

大兔子大兔子 提交于 2020-09-30 16:00:21
3、GROM 关联 (golang) 文章目录 3、GROM 关联 (golang) 属于 属于 外键 关联外键 Belongs To 的使用 查询 查询 Where 条件 普通 SQL Struct & Map Not 条件 Or 条件 Inline Condition 内联条件 Extra Querying option 其它查询选项 FirstOrInit Attrs Assign FirstOrCreate Attrs Assign Advanced Query 高级查询 SubQuery 子查询 选择字段 排序 数量 偏移 总数 Group & Having 连接 Pluck 扫描 Has Many Has Many 外键 关联外键 多态关联 Has Many 的使用 Many To Many Many To Many 互引用关联 多外键 连接表外键 自引用关联 Many To Many 的使用 关联 自动创建/更新 跳过自动更新 跳过自动创建 跳过自动创建及更新 跳过引用的保存 关联模式 查找关联 添加关联 替换关联 删除关联 清空关联 关联的数量 Preloading (预加载) 预加载 自动预加载 嵌套预加载 自定义预加载 SQL 属于 属于 belongs to 会与另一个模型建立一对一关系,因此声明的每一个模型实例都会”属于”另一个模型实例。 例如,

急招 Golang 熟手,来做 5G 事业。

醉酒当歌 提交于 2020-09-26 13:42:45
内推 内推直通车,简历请发送至邮箱: fan.guiju#99cloud.net 内推直通车,简历请发送至邮箱: fan.guiju#99cloud.net 内推直通车,简历请发送至邮箱: fan.guiju#99cloud.net JD 公司 :浙江九州云科技信息有限公司,一家全球领先的边缘计算解决方案公司。 Base :北京。 我们需要你来 : 参与九州云 4G、5G MEC 边缘计算平台产品的设计与实现。 参与九州云 IaaS、CaaS、PaaS 产品的设计与实现。 参与九州云 5G 核心网元产品的设计与实现。 我们希望你 : 熟练掌握 Go 语言,并对掌握多种编程语言抱有兴趣。 熟悉 Cobra、go-restful、gorm 等开发框架。 了解 Kubernetes、OpenShift 云平台。 具有云原生思想。 具有良好的文档、Code Review、CI/CD 等工程师气质。 加分项 : 了解 OpenStack、VMware 私有云平台。 了解 4G、5G 移动通信技术。 了解 MEC 边缘计算。 来源: oschina 链接: https://my.oschina.net/u/4261553/blog/4532597

[Go] 浅谈 gorm 执行 AutoMigrate 的两种时机

纵然是瞬间 提交于 2020-08-15 13:58:04
第一种就是直接在操作 model 的逻辑中,执行 db.AutoMigrate,模型没有更新时不会有 schema 相关的 sql 被执行。 第二种就是单独定义一个属于 main 包的 go 文件,专门用于处理 Migrate。 有其它想法欢迎留言。 Link: https://www.cnblogs.com/farwish/p/12967843.html 来源: oschina 链接: https://my.oschina.net/u/4374580/blog/4292318

从设计到开发,实现一个人人都可以简单使用及管理的工作流系统

核能气质少年 提交于 2020-08-13 04:32:34
工作流介绍 工作流(Workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。 工作流在IT领域不算是“新人”了,工作流思想在上世纪60年代就有人提出过;70年代就有人开始尝试,但是由于当时许多的限制,工作流一直没有成功的被实现;80年代才出现第一批成功的工作流系统;90年代工作流技术走向了第一个发展高峰期;90年代后至今工作流出现了很多版本,但是主旨还是不变的,为了使我们的工作变得更加高效。 我们通过工作流可以节省很多不必要的时间,预设置好的处理人,可以让我们不必反复的问别人谁负责此节点;通过任务来实现最后的操作,可以让我们减少很多人力成本,当然想要实现一套完善、简单、通用、方便管理的工作流系统也是非常不容易的,接下来推荐一个较为通用的,方便使用及管理的工作流系统。 Demo: 工作流系统(ferry) 项目问答社区: 问答社区 此工作流系统使用的技术栈: Golang Gin Gorm Vue Element 数据结构设计 对于一个完整的工作流系统来说,我们需要有流程、模版、分组、用户、任务等等,并且这些东西都是可以灵活定制的,因为如果不能灵活定制的话,对于普通的使用这来说是非常不方便的,所以对于一个好的工作流系统,是必须要实现灵活性的。 下面直接来展示一下,数据结构的设计图。

gin+gorm 用户服务

时光毁灭记忆、已成空白 提交于 2020-08-11 07:31:21
package main import ( "fmt" "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) var db *gorm.DB var err error type User struct { ID int `json:id` Name string `json:"name"` Age int `json:"age"` Sex int `json:"sex"` } func main() { db,_ = gorm.Open("mysql","root:root@tcp(192.168.40.10:3306)/wang?charset=utf8&parseTime=True&loc=Local") if err != nil{ fmt.Println(err) return } else { fmt.Println("connect success") } defer db.Close() db.AutoMigrate(&User{}) r := gin.Default() // 用户管理 r.GET("/",getUserList) r.GET("/user/:id",getUserInfo) r.GET("/users"

如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (二)

早过忘川 提交于 2020-08-09 14:40:01
创建 API   我们之前已经跑过 Gin 框架的代码,现在是时候加些功能进去了。 读取全部信息   我们先从"增删改查"中的"查"入手,查询我们之前添加的信息。我接下来要删除几行代码,并把 Gin 的框架代码加回来。 package main import ( "fmt" "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/sqlite" ) var db *gorm .DB var err error type Person struct { ID uint `json:"id”` FirstName string `json:"firstname”` LastName string `json:"lastname”` } func main ( ) { // NOTE: See we’re using = to assign the global var // instead of := which would assign it only in this function db , err = gorm . Open ( "sqlite3" , "./gorm.db" ) if err != nil { fmt . Println (err ) }

如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (三)

有些话、适合烂在心里 提交于 2020-08-09 11:14:47
修改数据结构   基本的 API 已经定义好了,现在是个修改 Person 对象结构的好时机。只要修改 Person 结构体,数据库和 API 都会自动做出相应的修改。   我要做的是在 Person 结构体中添加 city 字段,就这一行,没有其他改动。 type Person struct { ID uint `json:"id"` FirstName string `json:"firstname"` LastName string `json:"lastname"` City string `json:"city"` }   刷新浏览器,你就会看到 city 字段已经添加进去了。 [ { "id" : 2 , "firstname" : "Elvis" , "lastname" : "Presley" , "city" : "" } , { "id" : 3 , "firstname" : "Tom" , "lastname" : "Sawyer" , "city" : "" } ]   Gin 可以创建和修改字段,而不需要做其他任何改动。 $ curl -i -X PUT http : / /localhost : 8080 /people / 2 -d '{ "city": "Memphis" }' HTTP / 1.1 200 OK Content -Type :

[Go] gorm 返回指定模型数据的处理方式

巧了我就是萌 提交于 2020-07-28 03:14:25
重新 var 声明一个变量,类型为包含指定字段的结构体。 查询的时候,还是使用原始模型类型的变量。 example: // For return data var retMember struct { Hash string `json:"hash"` Name string `json:"name"` CreatedAt time.Time `json:"created_at"` } // For query full data var member model.Member Link: https://www.cnblogs.com/farwish/p/12969001.html 来源: oschina 链接: https://my.oschina.net/u/4383141/blog/4293251