首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Golang业务代码封装redis 使用struct 还是interface更加合理?

在这个问题中,我们需要考虑使用Golang编写业务代码时,封装Redis时是使用结构体(struct)还是接口(interface)更加合理。

首先,我们需要了解Redis是一个高性能的键值存储数据库,它可以用于缓存、消息队列等应用场景。在Golang中,我们可以使用Redis客户端库与Redis服务器进行通信。

在这个问题中,我们需要考虑使用Golang编写业务代码时,封装Redis时是使用结构体(struct)还是接口(interface)更加合理。

结构体(struct)和接口(interface)都是Golang中的重要概念,它们在不同的场景下有不同的用途。

结构体(struct)是一种聚合数据类型,它可以将不同类型的数据组合在一起,从而表示一个完整的实体。在封装Redis时,使用结构体可以将Redis的相关属性和方法封装在一起,使代码更加清晰和易于维护。

接口(interface)是一种抽象类型,它定义了一组方法的集合,任何实现了这些方法的类型都可以被视为实现了该接口。在封装Redis时,使用接口可以将不同的Redis客户端库进行统一的抽象,从而实现更加灵活的代码设计。

综上所述,在封装Redis时,使用结构体和接口都有各自的优点和适用场景。如果需要将Redis的属性和方法封装在一起,并且需要实现一些特定的功能,那么使用结构体会更加合理。如果需要将不同的Redis客户端库进行统一的抽象,并且需要实现更加灵活的代码设计,那么使用接口会更加合理。

总之,在封装Redis时,使用结构体或接口取决于具体的需求和场景。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Golang 官方推荐使用Redis 客户端 redigo

01 介绍 在之前的文章介绍过 Golang 操作 Redis 的三方库 go-redis,本文主要介绍另外一个 Golang 操作 Redis 的三方库 redigo,它是 Golang 官方推荐使用的...go-redis 三方库为我们封装了很多函数来执行 Redis 命令,而 redigo 三方库只有一个 Do 函数执行 Redis 命令,更接近使用 redis-cli 操作 Redis,这一点是我个人比较喜欢的...,只要熟悉 Redis,就可以轻松使用 redigo 作为客户端操作 Redis,而不需要再去记三方库封装的函数。...= nil { fmt.Println("struct err: ", err) } fmt.Println(replyStruct) } 阅读上面这段代码,我们使用 AddFlat 方法将结构体写入...05 总结 本文我们介绍了 Golang 官方推荐的操作 Redis 的三方库 redigo,它仅需使用 Do 函数执行 Redis 所有命令,它还提供了很多助手函数帮助我们更加方便操作 Redis

7.6K40

Golang工程经验(上)

Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。...interface - 泛型编程 严格来说,在 Golang 中并不支持泛型编程。在 C++ 等高级语言中使用泛型编程非常的简单,所以泛型编程一直是 Golang 诟病最多的地方。...如果函数参数是interface或者返回值是interface,这样就可以接受任何类型的参数 基于Golang的model service 模型【类MVC模型】 在一个项目工程中,为了使得代码更优雅...在Golang中,没有类、继承的概念,但是我们完全可以通过structinterface来建立我们想要的任何模型。...对于使用java和PHP编程的同学对这个模型应该是再熟悉不过了,我这边通过代码来说明下这个模型 首先一个model包,通过interface来实现,包含一些基础方法,需要被外部引用者来具体实现 1package

1.9K32

Beego:简约 & 强大并存的 Go 应用框架

Golang安装和使用请参考https://golang.google.cn/doc/ 什么是Beego?...param=value" (左右滑动查看全部代码) 当SessionProvider为redis时,SessionSavePath是redis的链接地址,采用了redigo,如下所示: beego.SessionProvider...优点: 1)使用简单:通过命令行创建beego项目;监控代码修改进行热编译;自动化测试代码以及自动化打包部署。...(3) Beego在业务方面较Gin支持更多(Beego有多模块封装,且支持单独模块独立使用,构建项目更加方便) (4) Gin在性能方面较Beego更好(遇到性能瓶颈适合使用Gin) 诚然Beego在性能方面确实不能和...Gin比,但是在复杂业务转化为项目时更加方便,而Gin实现业务逻辑需要更多的代码和库引用。

7.6K22

玩转golang——JSON高性能自动字段名

对于一个只包含三五个,十个八个struct的系统而言,多写几行代码不成问题。但一个有几十个上百个struct业务,也要一个一个写过来吗? 就算你敢写,我也不敢用。机械化重复的工作,人力太不可靠。...如无tag指定,golang默认使用代码中的字段名,在这里加一个逻辑,变成自己想要的风格,不就行了吗? 当然行了!而且开发成本和运行成本,都非常低! 但还是有几个问题: 直接修改GOROOT代码?...不论链表还是树,都会用数组来存储。即便某个业务(或某个有个性的前端)非要用自引用的协议,也不可能是无限层的,现实的业务必然有其上限。...所以我们设定一个合理的上限,在递归中记录同一个struct出现的次数,达到后再出现就不再处理,即可满足实践中所有场景。 使用动态类型 现在我们获得了神奇的动态类型,赶紧写代码试试。...(*Person) //到这里 才能获得原始Person对象, 供代码使用 2. 为了调用流畅性,只能自己封装Marshal/Unmarshal函数。

3.2K01

分布式事务框架 seata-golang 接入指南

seata-golang 是一个分布式事务框架,实现了 AT 模式和 TCC 模式,AT 模式相较 TCC 模式对代码的入侵性更小、需要开发的接口更少;但 AT 模式对事务操作的数据持有全局锁,从这点来说...下面以seats-golang samples 为例,就 AT 模式和 TCC 模式如何接入到业务中做一个说明。 ?...这意味着你可以同时使用 orm 框架和 seata-golang 框架,当你的操作需要用到事务时,用 seata-golang 的 db 操作对象去执行 sql 语句。...对于上文讲述的接入方法,还希望读者结合代码多多理解,融汇贯通。...当前 seata-golang 与最新的 seata java 1.4 版本协议上完全打通,如果有公司在技术栈上既有使用 java 语言也有使用 golang 语言,可接入 seata 框架来解决您的分布式事务后顾之忧

2.7K10

100天精通Golang(基础入门篇)——第20天:Golang 接口 深度解析☞从基础到高级

本篇将全方位地揭示接口在 Golang 中的重要性,以及如何让你的代码更加模块化、可测试和可维护。 探究 Golang 的接口机制如何使代码更加模块化、可测试和可维护。...本文将从接口的定义、使用,到高级特性进行全面剖析。 导语 大家好,我是猫头虎!今天我们将一同进入 Golang 的神秘花园,探寻接口(Interface)的无穷魅力。...动态语言则没有这些要求,可以让人更专注在业务上,代码也更短,写起来更快,这一点,写 python 的同学比较清楚。 Go 语言作为一门现代静态语言,是有后发优势的。...使用接口实现模板模式: 通过定义一个接口来封装算法的变化,然后通过具体的类型来实现算法的可替换部分。 1.11 错误处理与接口 Go 语言中的错误处理也是基于接口的。...无论是基础的类型实现,还是高级的接口组合和多态性,接口都能让我们的代码更加简洁和高效。掌握接口不仅可以让你更加自如地使用 Golang,也会极大地提升你的编程水平。

6710

一文了解一线互联网大厂的 Golang 单测最佳实战经验

但即便如此,在业界,使用 gomonkey 还是依然非常多 gomonkey 作为一个打桩的工具,使用场景还是比较广泛,可以使用在我们大部分的应用场景。...如果有同样的看法,那么就果断用起来吧 mock 的使用经验说明 了解自己的测试意图 测试意图是说,单测里面主要是测自己写的业务逻辑,不要把单测精力放在 RPC 接口上的测试,像 redis、mysql...从代码设计层面为单测做准备 合理的对外部依赖做好接口封装 合理的对外部依赖做好接口封装,因为外部依赖我们基本上期望的方式就是通过 mock 来实现单测的目的,这里就要求我们对外部依赖的里面做好方法的封装...具体做法就是定义一个 interface,然后把外部依赖的接口都统一定义并封装好,这样的代码设计,既方便写单测,整体代码又比较优雅。...,还是正常 go 一个协程出去执行业务逻辑 go f() } 这个时候,在业务代码里面,我们就不能再用官方的 go 关键字来 go 一个协程了,需要用 testgo.Go 来替换了。

1.3K20

万字详文阐释程序员修炼之道

golang 的同学就更不陌生了,我们要把一个 struct 作为一个 interface使用,不需要显式 implement/extend,仅仅需要持有对应 interface 定义了的函数。...pythonLamp、javaLamp、其他各种 Lamp 是依赖 Botton interface 的定义,才能用来和 UI struct 组合起来拼接成完整的业务逻辑。...合理使用 DIP 的 OOP 代码才可能是高质量的代码。...你要能说出为什么你的封装是必要的,有价值的。必要的时候,你必须要封装。比如,当你的 golang 函数达到了 80 行,你就应该对逻辑分组,或者把一块过于细节化却功能单一的较长的代码独立到一个函数。...认可好的代码架构对于业务的价值,才能真正地做到举一反三,理解无数例子,能对更多的 case 自己做出合理的判断。同时,把好的判断传播起来,做到"群体免疫",最终做好 review,做好代码质量。

21621

万字详文阐释程序员修炼之道

golang 的同学就更不陌生了,我们要把一个 struct 作为一个 interface使用,不需要显式 implement/extend,仅仅需要持有对应 interface 定义了的函数。...pythonLamp、javaLamp、其他各种 Lamp 是依赖 Botton interface 的定义,才能用来和 UI struct 组合起来拼接成完整的业务逻辑。...合理使用 DIP 的 OOP 代码才可能是高质量的代码。...你要能说出为什么你的封装是必要的,有价值的。必要的时候,你必须要封装。比如,当你的 golang 函数达到了 80 行,你就应该对逻辑分组,或者把一块过于细节化却功能单一的较长的代码独立到一个函数。...认可好的代码架构对于业务的价值,才能真正地做到举一反三,理解无数例子,能对更多的 case 自己做出合理的判断。同时,把好的判断传播起来,做到"群体免疫",最终做好 review,做好代码质量。

1.7K73

Go 语言学习技巧和编程思维

并且还可以兼容 C ,不过,一般实际应用中很少会使用兼容 C 的使用姿势,要么纯 Go、要么纯 C。Go 另外一个比较大的优势在于支持协程,可以非常快速的写出并发高的代码,Go 的并发非常简单。...、CoreDNS、etcd 等等,具体要看这些东西:项目基本架构的组织代码基本的编码封装代码的基本原则规范并发的设计思想面向对象编程的设计思想可扩展性的设计思想最后就是要动手实践,实实在在的跑一些代码示例...、 struct 来实现继承、多态的用法struct 匿名组合来实现继承interfacestruct 来实现多态interface 定义接口,尽可能的保持里面的方法定义简单,然后多个 interface...进行组合理解 Go 语言的一些独有特性和惯用法:按照官方和内部的编码规范来使用,熟悉它的各种惯用法强类型,语法上要注意处理一定要关注 GC,实际中要观察 GC 日志并做好分析Go 是有 Runtime...Golang 中用好的一些开源组件库,都是比较轻量级的,然后可以各自随意组合来达到最佳实践。我们自己进行组件封装、模块封装的时候,也是保持这个原则,尽可能的精简,然后使用方进行组合。

42251

通过 GoLang 实现面向对象思想

面向对象的特征 面向对象拥有三个基本特征: 封装 继承 多态 3. golang封装 GoLang 中的封装主要依赖结构体实现对象的封装: package person import "fmt"...%d\n", person.Name, person.Age) } func (person *Person) SetAge(age int) { person.Age = age } 上述代码封装了...接口类 — interfaceGoLang 中,我们也可以定义 interface 类型,仅声明方法,由所有子类进行实现: package main import "fmt" type Human...interface { speak(language string) } type Chinese struct { } type American struct { } func...但与 C 语言相比,GoLang 严格的类型检验与无法移动的指针类型以及精简的语言特性,让他在面向对象思想的实现中更加捉襟见肘,但从另一个角度考虑,这些 GoLang 语言本身的限制,让 GoLang

23010

GoLang 操作 Redis

前言 使用redis首先要部署redis,载个安装包,部署下即可,本文不赘述了。...redis官网:https://redis.io/ 接着要下载golangredis资源包,golang官方推荐的有redisgo和go-reids,个人认为go-redis封装更加人性化,redisgo...的调用是基于命令的,go-redis是基于方法的,所以本文先来介绍go-redis使用。...作为万金油的字符串类型,可以支持struct结构,基本上string类型在传统系统可以解决80%以上的问题。我们看下golang如何使用字符串类型。...我们在使用List类型时需要注意一个问题,及生产速度大于消费速度,这样会导致List中的数据越来越多,给Redis的内存带来很大压力,所以我们在使用List类型时需要考虑生产消费的能力。

89930

客户决策 | 我的代码没有else

嗯,我的代码没有else系列,一个设计模式业务真实使用golang系列。 ? 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。...每一行代码下面的十字路口 当代码的下一步面临选择的时候都可以使用「策略模式」,我们把不同选择的算法按照统一的标准封装,得到一类算法集的过程,就是实现「策略模式」的过程。...关于怎么用,完全可以生搬硬套我总结的使用设计模式的四个步骤: 业务梳理 业务流程图 代码建模 代码demo 业务梳理 我们以某团的订单支付页面为例,页面上的每一个支付选项都是一个支付策略。...结语 最后总结下,「策略模式」抽象过程的核心是: 在每一行代码下面的十字路口 声明标准:定义interface 封装算法:按照标准interface封装分支代码,得到每一个具体策略 构建算法集:每一个具体策略构成策略池子...我的代码没有`else`,只是一个在代码合理设计的情况下自然而然无限接近或者达到的结果,并不是一个硬性的目标,务必较真。 2.

88820

徒手用 Go 写个 Redis 服务器

支持: 5 种数据结构(string、list、hash、set、sortedset) 自动过期(TTL) 发布订阅、地理位置、持久化等功能 你或许不需要自己实现 Redis 服务,但你是否厌烦了每天都是写增删改查的业务代码...当然不会,Golang 利用 Goroutine 调度开销远远小于线程调度开销的优势封装出 goroutine-per-connection 风格的极简接口,而且 net/tcp 库将 epoll 封装成了阻塞...但渐进式 rehash 的实现非常复杂,所以 godis 采用 Golang 社区广泛使用的分段锁策略(非上面的三种),就是将 key 分散到固定数量的 shard 中避免进行整体 rehash 操作。...代码如下: type ConcurrentDict struct { table []*Shard count int32 } type Shard struct { m...期待您的关注和 Star: 项目地址:https://github.com/HDT3213/godis 四、结束 很多朋友的日常工作主要是编写业务代码,对于框架、数据库、中间件这些“架构”、“底层代码

1.8K10

从0到0.5用golang写一个web项目

但是这里有个小问题:golang自带的net/http包里面对牛逼的RESTful支持的并不好。但是问题不大,让我们去程序员聚集的Github上找找有没有支持REST的router可以使用。...使用也比较简单:初始化一个validator,并调用其Struct方法来做校验即可。...比如笔者见过某DBA同学吐槽RD使用SQL builder时不管SQL查询的字段是什么,都先拷贝一段的SQL Builder代码,关键是这段代码大部分内容用不上。。。...这样做的好处是,写到文件最上方的SQL常量可以给DBA做SQL审计,下面对返回结果进行封装,不必写重复的代码。...打日志这件事情需要贯彻到具体的业务代码逻辑中,这里为了说明,所以前期没加日志,读者看到了不要模仿,没加日志不是我的本意~让我们赶紧在代码的各个关键地方把日志补上。

58730

从0到1写一个web服务(上)

但是这里有个小问题:golang自带的net/http包里面对牛逼的RESTful支持的并不好。但是问题不大,让我们去程序员聚集的Github上找找有没有支持REST的router可以使用。...使用也比较简单:初始化一个validator,并调用其Struct方法来做校验即可。...比如笔者见过某DBA同学吐槽RD使用SQL builder时不管SQL查询的字段是什么,都先拷贝一段的SQL Builder代码,关键是这段代码大部分内容用不上。。。...这样做的好处是,写到文件最上方的SQL常量可以给DBA做SQL审计,下面对返回结果进行封装,不必写重复的代码。...打日志这件事情需要贯彻到具体的业务代码逻辑中,这里为了说明,所以前期没加日志,读者看到了不要模仿,没加日志不是我的本意~让我们赶紧在代码的各个关键地方把日志补上。

67420

手把手教你如何进行 Golang 单元测试

本篇不准备大而全的谈论单元测试、笼统的介绍 Golang 的单测工具,而将从 Golang 单测的使用场景出发,以最简单且实际的例子讲解如何进行单测,最终由浅入深探讨 go 单元测试的两个比较细节的问题...一段需要单测的 Golang 代码 package unitimport ( "encoding/json" "errors" "github.com/gomodule/redigo/redis" "regexp...Golang 单测工具选型 由于我们把单测简单的分为了两种: 对于无第三方依赖的纯逻辑代码,我们只需要验证相关逻辑即可,这里只需要使用 assert (断言),通过控制输入输出比对结果即可。...关于 mock 工具同时使用 gomock 和 gomonkey,这里跟 Golang 的语言特性有关,下面会详细的说明。 完善测试用例 这里我们开始对示例代码中的函数做单元测试。...://github.com/golang/mock#flags 生成的代码参考 https://github.com/xunan007/go_unit_test/blob/master/mock_redis.go

1.4K31

Golang 编程思维和工程实战

项目基本架构的组织 代码基本的编码封装 代码的基本原则规范 并发的设计思想 面向对象编程的设计思想 可扩展性的设计思想 然后就是实践,实实在在的跑一些代码示例,可以自己建立一个 base-code 的项目...我们自己进行组件封装、模块封装的时候,也是保持这个原则,尽可能的精简,然后使用方进行组合。...Golang 里面可以通过 interface + struct 来实现虚基类的用法。...在 Golang 中,没有类、继承的概念,但是我们完全可以通过 structinterface 来建立我们想要的任何模型。...对于使用 java 和 PHP 编程的同学对这个模型应该是再熟悉不过了,我这边通过代码来说明下这个模型 首先一个 model 包,通过 interface 来实现,包含一些基础方法,需要被外部引用者来具体实现

81120
领券