博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang中结构体嵌套接口实现送耦合
阅读量:3986 次
发布时间:2019-05-24

本文共 1223 字,大约阅读时间需要 4 分钟。

在golang中结构体A嵌套另一个结构体B见的很多,可以扩展A的能力。

A不仅拥有了B的属性,还拥有了B的方法,这里面还有一个字段提升的概念。

示例:

package mainimport "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 mainimport "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之间的嵌套。

转载地址:http://nnaui.baihongyu.com/

你可能感兴趣的文章
RFC959 ftp upload file
查看>>
qt5 ftp client debug snapshot
查看>>
pthread_sigmask test
查看>>
system performance test snapshot
查看>>
软件借用RSA增加注册功能
查看>>
使用ffmpeg将yuv编码成h264时有大小限制,太小的数据源编码会失败。
查看>>
yuv h264 avi WindowsMediaPlayer播放成功,虽然时间很短
查看>>
ffmpeg将yuv编码成h264数据量变小且可以使用暴风影音播放出来,很短一闪而过
查看>>
libx264 api example
查看>>
yuv encode h264 test
查看>>
对一帧YUV进行H264编码
查看>>
h264编码前必须要转换为yuv420p格式
查看>>
generate html code from QTableWidget with row and column span support
查看>>
yuv420
查看>>
QPainter draw yuv data
查看>>
Some collection resource about YUV420
查看>>
yuv420 stream offset calculation
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>
ffmpeg
查看>>