golang中结构体嵌套接口实现送耦合
在golang中结构体A嵌套另一个结构体B见的很多,可以扩展A的能力。
A不仅拥有了B的属性,还拥有了B的方法,这里面还有一个字段提升的概念。
示例:
package main
import "fmt"
type Worker struct {
Name string
Age int
Salary
}
func (w Worker) fun1() {
fmt.Println("Worker fun1")
}
type Salary struct {
Money int
}
func (s Salary) fun1() {
fmt.Println("Salary fun1")
}
func (s Salary) fun2() {
fmt.Println("Salary fun2")
}
func main() {
s := Salary{}
w := Worker{Salary: s}
//w.Name
//w.Age
//w.Money
//w.Salary
//w.fun1()
//w.fun2()
//w.Salary.fun1()
//w.Salary.fun2()
}
很明显现在 Worker 强依赖与 Salary ,有时候我们希望 Worker 只依赖于一个接口,这样只要实现了此接口的对象都可以传递进来。
优化后:
package main
import "fmt"
type Inter1 interface {
fun1()
fun2()
}
type Worker struct {
Name string
Age int
Inter1
}
func (w Worker) fun1() {
fmt.Println("Worker fun1")
}
type Salary struct {
Money int
}
func (s Salary) fun1() {
fmt.Println("Salary fun1")
}
func (s Salary) fun2() {
fmt.Println("Salary fun2")
}
func main() {
s := Salary{}
w := Worker{Inter1: s}
//w.Age
//w.Name
//w.fun1()
//w.fun2()
//w.Inter1
//w.Inter1.fun1()
//w.Inter1.fun2()
// 无法访问 Money 属性,可以增加方法来实现
}
Worker 依赖一个 Inter1 接口,只要实现了 Inter1 的对象都可以注入。
Worker 也实现了 Inter1 接口。
Worker 可以重新实现 Inter1 接口的方法。
golang的context标准库就是这样实现的context之间的嵌套。
到此这篇关于“golang中结构体嵌套接口实现送耦合”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!您可能感兴趣的文章:
2020-10-18Go语言接口
golang中结构体嵌套接口实现送耦合
golang 结构体断言_Golang的面向对象编程【结构体、方法、继承、接口】-Go语言中文社区...
go语言学习笔记 — 接口 — 接口的嵌套组合:把多个接口放到一个接口内
Go语言编程之面向“对象”编程篇
golang 结构体的嵌入类型和接口
go struct 成员变量后面再加个字符串是什么意思?_Go语言的学习笔记(第十章) 接口...
第07章 Go语言接口(interface),Golang接口(interface)
18接口-实现方法集合
Go语言基础之接口(面向对象编程下)