场景:
Golang Revel 开发中,由于重复代码而产生涉及结构类型的类似数据返回类型。考虑以下函数:
func (c Helper) Brands() []*models.Brand { // Query rethinkdb and populate the Brand model var brands []*models.Brand rows.All(&brands) return brands } func (c Helper) BlogPosts() []*models.Post { // Query rethinkdb and populate the Post model var posts []*models.Post rows.All(&posts) return posts }
在这两种情况下,返回类型是相同的(*[]struct)。为了避免重复,建议采用动态返回类型方法:
func (c Helper) ReturnModels(modelName string) []*interface{} { // Query rethinkdb with modelName and return []*interface{} }
问题:
答案:
是的,动态类型返回是可以实现的。该函数应该返回interface{}而不是[]*interface{}。下面是它的实现方式:
func (c Helper) ReturnModels(modelName string) interface{} { // Query rethinkdb with modelName and return interface{} }
为了利用返回的值,可以使用类型开关或类型断言将其转换回其原始类型:
示例:
if brands, ok := ReturnModels("brands").([]Brand); ok { // ... } if posts, ok := ReturnModels("posts").([]Post); ok { // ... }
通过实现这种方法,可以通过使用单个数据辅助函数来显着减少代码重复检索。
以上是Go中如何实现动态类型返回?的详细内容。更多信息请关注PHP中文网其他相关文章!