当前位置: 首页 > news >正文

微信公众号做微网站吗做网站小程序多少钱

微信公众号做微网站吗,做网站小程序多少钱,什么是网络营销网络营销的主要工具有哪些,人才网最新招聘gone是可以高效开发Web服务的Golang依赖注入框架 github地址#xff1a;https://github.com/gone-io/gone 文档地址#xff1a;https://goner.fun/zh/ 文章目录 Goner 和 依赖注入Goner的定义依赖标记Goners 注册Priest函数 Goner 和 依赖注入 Gone 作为一个依赖注入框架https://github.com/gone-io/gone 文档地址https://goner.fun/zh/ 文章目录 Goner 和 依赖注入Goner的定义依赖标记Goners 注册Priest函数 Goner 和 依赖注入 Gone 作为一个依赖注入框架首先需要回答的问题什么是依赖如何定义依赖 在golang中已经定义了package我们在项目中引入的package就是一种依赖这些依赖可以利用golang项目中的.mod文件进行比较好的管理然而这种依赖也并不是我们讨论的需要注入的依赖。 “依赖注入”作为一个动补短语要明确它的含义需要问什么依赖了什么谁注入了谁 在golang中能够承载业务逻辑的结构只有 func 和 structfunc 的执行结果 依赖 函数的参数而 struct 功能的实现 依赖 结构体的属性。无论是函数的参数 还是 结构体的属性都是业务逻辑实现的 依赖这样我们就回答了“什么是依赖” 定义 依赖是为了实现某业务逻辑函数或者结构体需要依赖的 外部值 或者 外部参数。 这些外部值或者外部参数可能是代表了业务逻辑依赖的外部业务实现我们的业务所需的业务逻辑需要依赖这些外部业务来完成。由此可见是 业务 依赖了 业务那么注入的也是业务是 业务 注入了 业务 。 为了对业务进行抽象我们定义了Goner它是一个接口所有业务结构体都要实现它那么在Gone框架中就是 Goners依赖GonersGoners注入到Goners。 Goner的定义 我们查看Goner的定义如下 type Goner interface {goneFlag() }可以看到Goner是一个接口要求实现一个私有方法goneFlag()这个方法是为了标识该结构体是Goner。由于golang语法限制在包外部是无法实现一个包内的私有方法的为了在外部的业务代码可以实现 Goner接口 我们又定义了gone.Flag结构体并且在实现了goneFlag()方法时将方法的接收者设置了为 Flag指针如下 type Flag struct{}func (g *Flag) goneFlag() {}这样业务结构体XBusiness 有且仅有 匿名嵌入gone.Flag才能完成对Goner接口的实现。gone框架要求只有Goner才可以被注册到Gone框架中用于依赖注入的装配。 例如 package exampleimport github.com/gone-io/gonetype XBusiness struct {gone.Flag }这样设计的好处是 限定依赖注入装配的对象都是Goner可以简化了依赖注入装配流程实现。限定Goner一定是指针依赖注入时可以避免结构体的值拷贝一方面是提高性能另一方面是避免值拷贝时的“浅拷贝”业务对象带来的未知问题。 依赖标记 业务结构体中并不是所有的属性都需要依赖注入需要有一种机制标记哪些属性需要使用依赖注入。为此我们设计了标签gone来标记需要注入的属性如下 type Employee interface {Work() }type Company struct {gone.FlagBoss Employee gone:* // 标记需要依赖注入的属性 }公司需要注入一个员工作为Boss星号(*)表示该属性的注入只需要匹配类型即实现 Employee 接口的Goner就可以这种注入方式我们称为匿名注入。 需要注意 Goner 结构体需要注入的属性可以是任意 接口 或者 结构体指针这里并不限定是Goner只有Goner注册到Gone框架时限定Goner类型。 公司的老板不可能是任何员工都能担任的与匿名注入对应的就是具名注入注入标签可以将星号替换为需要注入Goner的Id 字符串如下 type Company struct {gone.FlagBoss Employee gone:boss // 具名注入要求该属性注入一个Idboss的Goner }Goners 注册 为了完成依赖注入的自动装配我们需要将所有的Goners注册到Gone框架中。下面给出上面公司依赖员工这个例子的完整代码如下 package mainimport (fmtgithub.com/gone-io/gone )type Employee interface {Work()Name() string }type Company struct {gone.FlagBoss Employee gone:boss // 标记需要依赖注入的属性 }func (c *Company) Start() {fmt.Printf(Company start, boss is %s\n, c.Boss.Name())c.Boss.Work() }type EmployeeImpl struct {gone.Flagname string }func (e *EmployeeImpl) Work() {fmt.Printf(I am working, my name is %s\n, e.Name()) }func (e *EmployeeImpl) Name() string {return e.name }func main() {gone.Prepare(func(cemetery gone.Cemetery) error {//注册EmployeeImplcemetery.Bury(EmployeeImpl{name: Scott}, gone.GonerId(boss))//注册Companycemetery.Bury(Company{})return nil}).Run(func(company *Company) {company.Start()}) }可以看到我们使用了cemetery.Bury 方法完成了Goner到Gone框架的注册该方法第二参数可以指定被注册的Goner的Id如果没有指定IdGone框架会自动为Goner随机生成一个Id。在具名注入时我们会用到注册时的GonerId来作为gone标签的值。 Priest函数 在上面代码中gone.Prepare 方法接收的参数为一个匿名函数它的形式如下 func(cemetery Cemetery) error在Gone框架中这样形式的函数被定义为Priest函数专门负责Goners的注册。 Priest的定义 type Priest func(cemetery Cemetery) error大多数情况下我们可以不用手动编写Priest代码在gone中提供了 gone辅助工具可以为我们自动生成Priest函数代码自动生成Priest
http://www.hkea.cn/news/14328754/

相关文章:

  • asp建设网站需要了解什么建网站衡水哪家强?
  • 网站网站到底怎么做服装外贸公司大量订单外发
  • 公司设计一个网站揭阳企业建站系统模板
  • 濮阳团购网站建设安卓android下载安装
  • 个人做网站花多少钱企业网站模板中文
  • 做情趣网站违法吗域名哪里注册
  • 看案例网站做平面设计需要学什么软件
  • 木马网站怎么做网站建设教程asp
  • 网站开发项目文档南山做网站公司
  • 网站开发费用算无形资产么哈尔滨网站设计多少钱
  • 响应式网站建设系统好业宝微商城
  • 达川网站制作南宁模板建站
  • 专业网站建设策划西安搬家公司收费标准
  • 深圳市网站制作网站建设解决方案
  • 做地推的网站桂林建设银行招聘网站
  • 做电影网站 资源去哪里找怎么设置自己的网站
  • 程序员做任务的网站空间设计公司网站
  • 丹阳网站建设公司阿里云wordpress数据库
  • 网站建设流程行业现状如何代做网站
  • 珠海网页模板建站大型菜谱网站建设
  • 电子商务网站的建设开发工具wordpress 插件 教程视频
  • 潍坊昌大建设集团有限公司网站kol营销模式
  • 网站设置默认首页网络营销案例具体分析
  • js做示爱网站例子品牌推广广告
  • 合肥专业做网站的怎样建设一个网站教学设计
  • 泉州手机网站建设自己网站怎么推广
  • 虚拟主机对网站seo有哪些影响百度一下你就知道官网首页
  • 找人代做网站需要注意什么家具设计理念
  • 通过高新区网站建设贵州三蒲建设工程有限公司网站
  • php做商城网站建设如何查看网站根目录