首页 > 其他分享 >关于Golang中的依赖注入实现

关于Golang中的依赖注入实现

时间:2024-06-13 23:44:55浏览次数:19  
标签:依赖 UserFace Get 接口 Golang 调用 SysUser 注入

先定义一个内部调用接口 用于后面的注入

// 被 注入的接口
type UserFace interface {
    Get() string
    Set() string
}

然后定义一个 Struct ,开启构造函数,并实现 上面的 接口 

type SysUser struct {
    Name string
}

// User的构造函数
func NewSysUser(Name string) *SysUser {
    return &SysUser{Name: Name}
}

// 实现接口 UserFace
func (u *SysUser) Get() string {
    return "SysUser.Get"
}

// 实现接口 UserFace
func (u *SysUser) Set() string {
    return "SysUser.Set"
}

定义一个对 外部 (main 或者是 gin可以直接 调用的)调用接口

type MyFace interface {
    Sum(a int, b int) int
}

然后 定义外部Struct  用于实现上面的  外部 调用接口,并且 注入内部调用接口UserFace 

 

// 定义结构体  并注入 UserFace
type MyStruct struct {
    UserFace UserFace // 注入 UserFace
}

// MyStruct构造函数
func NewMyStruct(face UserFace) *MyStruct {
    return &MyStruct{
        UserFace: face, // 注入 SysUser 系统用户
    }
}

// 实现接口 MyFace
func (ms *MyStruct) Sum(a int, b int) int {
    getval := ms.UserFace.Get() // 调用 注入的 UserFace 的Get方法
    setVal := ms.UserFace.Set() // 调用 注入的 UserFace 的Set方法
    fmt.Println("MyStuct调用了UserFace Get: ", getval)
    fmt.Println("MyStuct调用了UserFace Set: ", setVal)
    return a + b
}

 

 

 

Main 使用  (注意:不能face.UserFace.Get() 这么调,因为UserFace是接口类型,只能在实现 MyFace 接口并注入 UserFace的 MyStruct 里调用 )

func main() {
    sysUser := NewSysUser("张三")            // 定义注入实体
    var face MyFace = NewMyStruct(sysUser) // 定义 外部 接口类型 并将实体注入
    result := MyFace.Sum(face, 1, 2)       // 调用外部接口方法
    fmt.Println(result)
    //face.UserFace.Get()   // 注意 不能这么调,因为UserFace是接口类型
}

 

标签:依赖,UserFace,Get,接口,Golang,调用,SysUser,注入
From: https://www.cnblogs.com/yingger/p/18246970

相关文章

  • Golang性能优化实践
    内存警察警惕一切隐式内存分配典型case:函数返回了字符串、切片,警惕一切字符串传进去的输入,函数内部重新分配了一个新的内存返回对象复用1.sync.pool 保证有一个ch大小的对象可用 假设有cpu核数那么多并发任务,可以保证gc的时候有保底在 2.局部cachesync.pool......
  • SQL注入&HTTP 头XFF&COOKIE&POST请求
    目录#知识点:#补充点:案例演示1数据请求方式涉及到的问题:phpJavaSpringPython案例演示2手工注入sqlmap注入方式一方式二案例演示3​编辑案例演示4#知识点:1、数据请求方式-GET&POST&COOKIE等2、常见功能点请求方式-用户登录&IP记录等3、黑盒白盒注入......
  • golang reflect 反射机制的使用场景
     Go语言中的reflect包提供了运行时反射机制,允许程序在运行时检查和操作任意对象的数据类型和值。 以下是reflect包的一些典型使用场景: 1.动态类型判断与转换:当需要处理多种类型的变量且具体类型直到运行时才能确定时,可以使用反射来检查变量的实际类型,并在可能的情况......
  • golang执行语句操作与map结构体变量调用函数
    本文记录利用golang调用exe文件。需要用到包os/exec,本文重点介绍如何利用golang执行带参数的可执行文件以及踩过的坑。首先c:=exec.Command(cmd)语句不会执行cmd命令,而是做好要执行的准备,当接下来调用c.Run()时才会执行cmd命令,注意到此时是会阻塞进程的,等待执行完成才会进行下一......
  • golang 字节级操作和字符串的区别与转换 []byte(message)
     []byte(message)将字符串message转换为一个字节切片([]byte)。在Go语言中,字符串是不可变的,而字节切片可以被修改。这种转换常用于处理字符串的字节级操作,如编码、解码或写入IO流。 字节级操作和字符串操作在编程中有本质的不同,主要体现在以下几个方面:1.数据单位:......
  • golang sync.Map 与使用普通的 map 的区别
     使用sync.Map与普通的Gomap主要有以下几点区别:1.并发安全性普通map:在没有外部同步的情况下,不是并发安全的。在多goroutine访问时,如果没有适当的锁或其他同步机制保护,可能会导致数据竞争和未定义行为。sync.Map:是并发安全的。它内部实现了必要的同步机制,允许多......
  • Maven无法下载依赖之 maven-default-http-blocker (http://0.0.0.0/): Blocked mirror
    问题:maven-default-http-blocker(http://0.0.0.0/):Blockedmirrorforrepositories:原因:名称为maven-default-http-blocker的拦截器拦截了库的镜像。场景:在企业内部架设了一个Nexus的私有库,库的地址是:http://hostname:8081/repository/maven-public/,于是在项目中需要从这......
  • nodejs下载依赖npm install报错
    npminstall报错,解决记录_npmwarnusing--forcerecommendedprotectionsdis-CSDN博客先切换镜像源,然后清理缓存,在使用npm命令注意前面可能爆粗哦的原因大概率是权限问题,所以采用这种解决方式加上面合体:解决:安装vueCLI不成功时,执行npmcleancache-force清除缓存命令无效_n......
  • XML实体注入漏洞
    漏洞等级:高危漏洞类型:XML实体注入漏洞描述:XXE漏洞全称XMLExtemalEndyniecionlxm以外部实体注入漏洞,X在漏洞发生在应用程序经析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起d0s攻击等危害。xxe漏洞触发的......
  • 【解决了一个小问题】因为镜像证书的问题,golang http client出现错误 `tls: failed to
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯一个服务使用Docker打包镜像,部署到k8s后出现如下的错误信息:tls:failedtoverifycertificate:x509:certificatesignedbyunknownauthority出错的位置是......