教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang中结构体嵌套接口实现送耦合

golang中结构体嵌套接口实现送耦合

发布时间:2021-04-29   编辑:jiaochengji.com
教程集为您提供golang中结构体嵌套接口实现送耦合等资源,欢迎您收藏本站,我们将为您提供最新的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语言基础之接口(面向对象编程下)

[关闭]
~ ~