【技术教程】RTMP协议视频直播点播平台EasyDSS内Go语言使用反射优化代码技巧说明
在开发 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