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

网站开发毕设的需求分析百度推广管理系统

网站开发毕设的需求分析,百度推广管理系统,做内容网站 用什么模版,事业单位网站建设计划gone是可以高效开发Web服务的Golang依赖注入框架 github地址:https://github.com/gone-io/gone 文档地址:https://goner.fun/zh/ 文章目录 Goner 和 依赖注入Goner的定义依赖标记Goners 注册Priest函数 Goner 和 依赖注入 Gone 作为一个依赖注入框架&am…

gone是可以高效开发Web服务的Golang依赖注入框架
github地址:https://github.com/gone-io/gone
文档地址:https://goner.fun/zh/

文章目录

  • Goner 和 依赖注入
    • Goner的定义
    • 依赖标记
    • Goners 注册
    • Priest函数

Goner 和 依赖注入

Gone 作为一个依赖注入框架,首先需要回答的问题:什么是依赖,如何定义依赖?

在golang中已经定义了package,我们在项目中引入的package就是一种依赖;这些依赖可以利用golang项目中的.mod文件进行比较好的管理,然而这种依赖也并不是我们讨论的需要注入的依赖。

“依赖注入”,作为一个动补短语,要明确它的含义,需要问:什么依赖了什么,谁注入了谁?

在golang中,能够承载业务逻辑的结构,只有 funcstructfunc 的执行结果 依赖 函数的参数,而 struct 功能的实现 依赖 结构体的属性。无论是函数的参数 还是 结构体的属性,都是业务逻辑实现的 依赖;这样我们就回答了“什么是依赖?”:

定义

依赖,是为了实现某业务逻辑,函数或者结构体需要依赖的 外部值 或者 外部参数。

这些外部值或者外部参数,可能是代表了业务逻辑依赖的外部业务;实现我们的业务所需的业务逻辑,需要依赖这些外部业务来完成。由此可见,是 业务 依赖了 业务,那么注入的也是业务,是 业务 注入了 业务

为了对业务进行抽象,我们定义了Goner,它是一个接口,所有业务结构体都要实现它;那么,在Gone框架中,就是 Goners依赖Goners,Goners注入到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/gone"type XBusiness struct {gone.Flag
}

这样设计的好处是:

  1. 限定依赖注入装配的对象都是Goner,可以简化了依赖注入装配流程实现。
  2. 限定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"` // 具名注入,要求该属性注入一个Id=boss的Goner
}

Goners 注册

为了完成依赖注入的自动装配,我们需要将所有的Goners注册到Gone框架中。下面给出上面公司依赖员工这个例子的完整代码,如下:

package mainimport ("fmt""github.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,如果没有指定Id,Gone框架会自动为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/822774/

相关文章:

  • 河南第二波疫情最新消息淘宝关键词优化技巧教程
  • 优化好的网站做企业网站百度代理公司
  • 外贸b2c网站如何做推广百度电话人工服务
  • 百度怎样做网站并宣传网站2023上海又出现疫情了
  • wordpress后台登录慢阳山网站seo
  • 深圳网站建设企网络推广运营途径
  • 给自己女朋友做的网站yandex搜索引擎
  • 购物网站建设教程怎么在网上做广告宣传
  • 冠县做网站推广网站怎么制作
  • 开封 网站建设苹果被曝开发搜索引擎对标谷歌
  • 东莞虎门高铁站百度客户端电脑版下载
  • 建网站怎么挣钱的学seo推广
  • 自如网站做的好 服务哪个网站学seo是免费的
  • 国外网站阻止国内访问怎么做竞价推广工具
  • 建设一个网站需要哪些方面的开支百度人工客服
  • 品牌网站建设-建站之路最新疫情新闻100字
  • 东莞网站优化科技有限公司怀柔网站整站优化公司
  • 郑州网站建设联系方式外链是什么意思
  • 用wordpress做网站教程电脑优化大师有用吗
  • 佛山企业网站制作今日热点新闻事件
  • 企业网站网络推广黑帽seo培训
  • 欧美做的爱爱网站有哪些广告推广赚钱
  • 泉州网站建设工作室谷歌seo价格
  • 国建设委员会网站百度推广一天烧几千
  • 做网站 花园路国贸营销推广方案包括哪些内容
  • 做商城网站哪里买口碑营销属于什么营销
  • 鞋子 东莞网站建设真正的免费建站在这里
  • 网站上微信的链接怎么做项目平台
  • 做网站后有人抢注关键词网络营销方案策划论文
  • 苏州网站建设网站seo优化的方法