编程范式游记
陈皓(网名“左耳朵耗子”)
资深技术专家
立即订阅
2 人已学习
课程目录
已更新 11 讲 / 共 11 讲
01 | 编程范式游记:起源
免费
02 | 编程范式游记:泛型编程
03 | 编程范式游记:类型系统和泛型的本质
04 | 编程范式游记:函数式编程
05 | 编程范式游记:修饰器模式
06 | 编程范式游记:面向对象编程
07 | 编程范式游记:基于原型的编程范式
08 | 编程范式游记:Go 语言的委托模式
09 | 编程范式游记:编程的本质
10 | 编程范式游记:逻辑编程范式
11 | 编程范式游记:程序世界里的编程范式
编程范式游记
登录
|
注册
08 | 编程范式游记:Go 语言的委托模式
陈皓
2019-07-16
我们再来看 Go 语言这个模式,Go 语言的这个模式挺好玩儿的。声明一个 struct,跟 C 很一样,然后直接把这个 struct 类型放到另一个 struct 里。
委托的简单示例
我们来看几个示例:
type
Widget
struct
{
X, Y
int
}
type
Label
struct
{
Widget
// Embedding (delegation)
Text
string
// Aggregation
X
int
// Override
}
func
(label Label)
Paint
()
{
// [0xc4200141e0] - Label.Paint("State")
fmt.Printf(
"[%p] - Label.Paint(%q)\n"
,
&label, label.Text)
}
由上面可知:
我们声明了一个
Widget
,其有
X
和
Y
;
然后用它来声明一个
Label
,直接把
Widget
委托进去;
然后再给
Label
声明并实现了一个
Paint()
方法。
于是,我们就可以这样编程了:
label := Label{Widget{
10
,
10
},
"State"
,
100
}
// X=100, Y=10, Text=State, Widget.X=10
fmt.Printf(
"X=%d, Y=%d, Text=%s Widget.X=%d\n"
,
label.X, label.Y, label.Text,
label.Widget.X)
fmt.Println()
// {Widget:{X:10 Y:10} Text:State X:100}
// {{10 10} State 100}
fmt.Printf(
"%+v\n%v\n"
, label, label)
label.Paint()
我们可以看到,如果有成员变量重名,则需要手动地解决冲突。
确认放弃笔记?
放弃后所记笔记将不保留。
取消
完成
0/1000字
划线
笔记
复制
©
版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《编程范式游记》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录
后留言
精选留言(1)
Transient
Control 部分只是影响 Logic 部分的效率。我觉得这句话后面还可以加上一句话就是,同时也可以增加代码的可读性,在效率相差不大的情况下,降低效率来增加可读性是非常有必要的。
2019-08-01
1
收起评论
1
下载
客户端
返回
顶部