【定义】 在一个 struct x 中,如果一个 anonymous field 包含有 field f 或者 method f,而且 x.f 是一次合法的 selector,那么就称这个 field f 或者 method f 是 promoted。
【对于 method set 的影响】给出一个 struct , type 为 S。给出一个 named type T 。Promoted methods 会扩充进 S 的 method set 中,规则如下:
- 如果 S 包含一个 anonymous field T , S 和 \*S 的 method set 就会包含 receiver 为 T 的 promoted methods 。 \*S 的 method set 会包含 receiver 为 \*T 的 promoted methods。
- 如果 S 包含一个 anonymous field \*T , S 和 \*S 两者的 method set 都会包含 receiver 为 T 和 \*T 的 promoted methods 。
【对于 composite literals 的影响】 Promoted field 不能在 composite literals 中用作 field names 。
有疑问加站长微信联系(非本文作者)
![](https://static.golangjob.cn/static/img/footer.png?imageView2/2/w/280)