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

凡科网站建设怎么样营销渠道管理

凡科网站建设怎么样,营销渠道管理,校园二手物品交易网站开发背景,深圳网页制作培训班Go相对java和C是较新的语言,但也有诸多优秀特性及生态库。本文介绍大多数软件工程中常用的功能:依赖注入。首先介绍什么是依赖注入,go实现库wire与其他语言的差异。然后通过简单示例实现依赖注入,简化代码、提升可读性。 依赖注入…

Go相对java和C++是较新的语言,但也有诸多优秀特性及生态库。本文介绍大多数软件工程中常用的功能:依赖注入。首先介绍什么是依赖注入,go实现库wire与其他语言的差异。然后通过简单示例实现依赖注入,简化代码、提升可读性。

依赖注入

依赖注入是一种对象接收它所依赖的其他对象(称为依赖项)的技术。通常,接收对象称为客户端,传入(“注入”)对象称为服务。

为了更好理解,下面通过一个简单示例进行说明:

package mainimport ("fmt"
)type Message string
type Greeter struct {Message Message
}
type Event struct {Greeter Greeter
}func GetMessage() Message {return Message("Hello world!")
}func GetGreeter(m Message) Greeter {return Greeter{Message: m}
}func (g Greeter) Greet() Message {return g.Message
}func GetEvent(g Greeter) Event {return Event{Greeter: g}
}func (e Event) Start() {msg := e.Greeter.Greet()fmt.Println(msg)
}func main() {message := GetMessage()greeter := GetGreeter(message)event := GetEvent(greeter)event.Start()
}

上面代码有message, greeter, event;GetMessage函数返回消息,GetGreeter函数接受消息返回greeter,getEvent函数接受返回greeter返回事件。事件还有一个方法start输出消息。

在main函数中,首先创建消息,然后作为依赖传入greeter,最后传给事件。运行程序可以看到输出“Hello world!",这是相对较浅的依赖图,但也能看到其复杂性,这也是依赖注入库wire的价值体现。

Wire简介

Wire是代码依赖工具,它没有采用反射机制或运行时状态,使用Wire可以有效避免手动编写硬代码依赖。Wire在编译时生成源码,官方文档描述: “In Wire, dependencies between components are represented as function parameters, encouraging explicit initialization instead of global variables.” (在Wire中组件之间的依赖关系表示为函数参数,优先采用显式初始化而不是全局变量。)

通过下面命令安装wire:go get github.com/google/wire/cmd/wire;全局安装wire,为后续使用wire命令生成代码:go install github.com/google/wire/cmd/wire

下面我们使用Wire作为依赖注入工具重构上面代码,新增wire.go文件,增加下面代码:

//go:build wireinject
// +build wireinject
package mainimport "github.com/google/wire"func InitializeEvent() Event {wire.Build(GetMessage, GetGreeter, GetEvent)return Event{}
}

首先导入wire,然后创建InitializeEvent函数,该返回在main函数中调用的事件。函数体内调用wire,在构建器方法内传入所有依赖,注意,传入依赖与顺序无关。然后返回空事件,无需担心,所有交给Wire。

注意,文件上面的注释告诉Go在编译时忽略该文件,要确保该注释行后面增加一行空行。

下面是main函数代码:


func main() {event := InitializeEvent()event.Start()
}

现在成功地把main函数代码降为两行。在wire.go代码目录下,执行wire命令,wire会生成wire_gen.go文件:

// Code generated by Wire. DO NOT EDIT.//go:generate go run github.com/google/wire/cmd/wire
//go:build !wireinject
// +build !wireinjectpackage main// Injectors from wire.go:func InitializeEvent() Event {message := GetMessage()greeter := GetGreeter(message)event := GetEvent(greeter)return event
}

同样生成的文件上面注释与wire.go文件相比多了!,表示wire在编译时忽略,go编译时启动。这是运行main函数正确输出结果。

带参数依赖

如果需要动态传入消息作为参数呢?下面我们修改GetMessage函数:

func GetMessage(text string) Message {return Message(text)
}

再次运行wire命令,可以看到wire_gen.go 代码也有相应修改:

// Code generated by Wire. DO NOT EDIT.//go:generate go run github.com/google/wire/cmd/wire
//go:build !wireinject
// +build !wireinjectpackage main// Injectors from wire.go:func InitializeEvent(text string) Event {message := GetMessage(text)greeter := GetGreeter(message)event := GetEvent(greeter)return event
}

现在修改main.go代码:

func main() {event := InitializeEvent("Hello Golang")event.Start()
}

运行结果与期望一致。

如果修改wire.go代码, 模拟缺少部分依赖:

func InitializeEvent(text string) Event {wire.Build(GetMessage, GetEvent)return Event{}
}

执行wire命令,会正确提示少了相应的依赖:

inject InitializeEvent: no provider found for demo01.Greeter needed by demo01.Event in provider "GetEvent" 

总结

本文介绍了基本wire概念,并通过简单示例介绍动态实现依赖注入。但一般wire会在较大项目使用,更多高级功能参考官方文档:https://github.com/google/wire/blob/main/docs/guide.md#advanced-features 。

http://www.tj-hxxt.cn/news/87710.html

相关文章:

  • 怎样做网站优化 知乎营销案例网站
  • 龙华做棋牌网站建设哪家便宜广东短视频seo营销
  • 做网站方案做免费推广的平台
  • 自适应网站和响应式网站的区别有域名和服务器怎么建网站
  • 秦皇岛网站制作人才招聘产品软文范例软文
  • 威海网站建设排名榜怎样在百度上免费建网站
  • 集团网站设计特性新乡网站优化公司价格
  • 青岛做网站多少钱seo营销专员
  • wordpress后台字体白帽seo公司
  • 帮助做APP的网站公司sem管理工具
  • 自己做网站 怎样下载模板百度提交入口网址是指在哪里
  • 高端品牌网站建设公司网站底部友情链接
  • 可以做视频推广的网站重庆seo优化
  • 大型企业网站设计案例百度提交入口网址
  • 衡水网站建设维护数字化营销怎么做
  • 建站公司那家好网络黄页推广软件哪个好用
  • 公司名称 网站域名 关联网站建设公司好
  • 宜昌网站建设多少钱企业网站seo多少钱
  • 怎样做网络兼职网站湖北网站设计
  • 建设b2b网站需要多少钱青岛seo公司
  • 做牛仔的时尚网站微信公众号推广2元一个
  • 如皋网站建设招标网络营销产品
  • 购物网站建设规划书seo快速收录快速排名
  • wordpress标题截断优化大师电脑版官方免费下载
  • 浙江建设职业技术学院oa网站惠州网络营销
  • 昆明做网站seo的网络营销推广策划
  • 链接网站开发需要多少钱软文推广500字
  • 用织梦做的网站一般后台线上销售渠道有哪几种
  • 上海微网站制作设计制作抖音搜索引擎优化
  • 网站百度地图怎么做elo机制