专业外贸网站华强北网上商城

张小明 2026/3/12 21:09:59
专业外贸网站,华强北网上商城,方寸网站建设,装修网站怎么建设设计模式-控制反转【golang】 听不懂的概念 将程序中对象的创建、依赖管理的控制权#xff0c;从代码内部转移到外部容器/框架 获取mysql数据#xff0c;存入redis package mrimport (fmtlogostesting )type Database int…设计模式-控制反转【golang】听不懂的概念将程序中对象的创建、依赖管理的控制权从代码内部转移到外部容器/框架获取mysql数据存入redispackagemrimport(fmtlogostesting)typeDatabaseinterface{Query(sqlstring)string}typeCacheinterface{Set(key,valuestring)}// Mysql操作typeMySQLDatabasestruct{}func(db*MySQLDatabase)Query(sqlstring)string{returnfmt.Sprintf(MySQL result: %s,sql)}// Pg操作typePgDatabasestruct{}func(db*PgDatabase)Query(sqlstring)string{returnfmt.Sprintf(PgSQL result: %s,sql)}// Redis操作typeRedisCachestruct{}func(c*RedisCache)Set(key,valuestring){fmt.Printf(Redis set: %s %s\n,key,value)}// 业务逻辑funcTestManual(t*testing.T){db:MySQLDatabase{}cache:RedisCache{}// 下面为业务逻辑代码user:db.Query(SELECT * FROM users WHERE id1)cache.Set(user:1,user)// ………………}定义好了查询 mysql、设置 redis 的方法TestManual需要做的事情是查询 mysql 的值存入 redis这时TestManual方法需要依赖两个依赖DatabaseCache当我的业务逻辑代码不变需要更换一下两个依赖时例如我要把mysql切换成PostgreSql时那只能修改我的业务逻辑方法了例如// 业务逻辑funcTestManual(t*testing.T){// db : MySQLDatabase{}db:PgSQLDatabase{}cache:RedisCache{}// 下面为业务逻辑代码user:db.Query(SELECT * FROM users WHERE id1)cache.Set(user:1,user)// ………………}所以我需要把依赖的这部分代码提出来以后换库还是什么的不去动我的业务逻辑方法-TestManual换一种写法添加一个RunUserService叫做管理容器也好方法也好总之是一块儿代码封装packagemrimport(fmtlogostesting)typeDatabaseinterface{Query(sqlstring)string}typeCacheinterface{Set(key,valuestring)}// Mysql操作typeMySQLDatabasestruct{}func(db*MySQLDatabase)Query(sqlstring)string{returnfmt.Sprintf(MySQL result: %s,sql)}// Pg操作typePgSqlDatabasestruct{}func(db*PgSqlDatabase)Query(sqlstring)string{returnfmt.Sprintf(PgSQL result: %s,sql)}// Redis操作typeRedisCachestruct{}func(c*RedisCache)Set(key,valuestring){fmt.Printf(Redis set: %s %s\n,key,value)}// 数据服务操作函数typeDataServiceHandlerfunc(db Database,cache Cache)funcRunUserService(handler DataServiceHandler){// 依赖代码迁移到这里db:MySQLDatabase{}// db : PgSqlDatabase{}cache:RedisCache{}handler(db,cache)}// 业务逻辑funcTestManual(t*testing.T){RunUserService(func(db Database,cache Cache){// 下面为业务逻辑代码user:db.Query(SELECT * FROM users WHERE id1)cache.Set(user:1,user)})}这种体现形式为 闭包回调函数interface 的组合方式我认为其本质还是回调函数通过传递一段预定义代码块在真正执行业务代码时调用栈返回去执行结果再回到调用方这里从而简化调用方的代码量更多的关于依赖注入、控制反转的实现参考 https://blog.csdn.net/qq_37485347/article/details/142203484
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

建站之星如何建网站大沥网站制作

如何快速使用GPTstudio:R语言AI编程的终极指南 【免费下载链接】gptstudio GPT RStudio addins that enable GPT assisted coding, writing & analysis 项目地址: https://gitcode.com/gh_mirrors/gp/gptstudio GPTstudio是一个专为R语言开发者设计的AI编…

张小明 2026/1/22 13:37:17 网站建设

国外电商网站设计欣赏上饶网站建设srsem

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个面向初学者的交互式学习模块,包含:1. SSL证书基础动画讲解2. CHLSProxy工作原理图示3. 常见错误类型图解4. 三步解决法演示5. 自测小测验。使用简单…

张小明 2026/1/22 13:36:46 网站建设

沈阳德泰诺网站制作谷歌关键词工具

【免费下载链接】d2-admin 项目地址: https://gitcode.com/gh_mirrors/d2a/d2-admin 告别重复开发,迎接代码复用的新时代 在当今快节奏的前端开发环境中,你是否曾为以下问题困扰:同一个组件在不同项目中重复开发、依赖版本冲突导致调试…

张小明 2026/1/22 13:36:15 网站建设

做汽车团购的网站有哪些秦皇岛城乡住房建设厅网站

第一章:【Open-AutoGLM隐私隔离沙箱】的核心理念与架构演进在人工智能模型日益复杂、数据敏感性不断提升的背景下,Open-AutoGLM隐私隔离沙箱应运而生。该系统旨在为大语言模型的自动化推理与训练任务提供端到端的数据保护机制,确保用户数据在…

张小明 2026/1/22 13:35:44 网站建设

怎么做网站免响应式网站制作方法

EmotiVoice性能评测:响应速度、清晰度与情感丰富度全解析 在虚拟助手越来越“懂人心”、游戏NPC开始“真情流露”的今天,语音合成技术早已不再是简单的文字朗读。用户不再满足于“能听清”,而是期待“听得动情”。传统TTS系统虽然解决了“说什…

张小明 2026/2/21 8:48:13 网站建设

重庆网站建设有限公司ifront做原型控件的网站

Python MySQL从零上手:30分钟搞懂为什么需要ORM 文章目录Python MySQL从零上手:30分钟搞懂为什么需要ORM学习开场:为什么Python开发者需要关注数据库操作?环境准备:搭建你的Python MySQL开发环境1. 安装必要的包2. 准备…

张小明 2026/1/22 13:34:43 网站建设