[2在不使用嵌入结构的情况下继承类型方法的另一种方法。但是,它需要对GO的类型系统有更深入的了解。
嵌入structs 在GO中,嵌入struct允许您访问嵌入式struct的字段和方法好像它们是包含结构的一部分。这是一个功能强大的功能,可用于在类型之间创建继承。
嵌入struct时,嵌入式结构的方法集不是自动晋升为包含结构。为了促进方法,嵌入式结构必须是匿名的。方法pasterion
方法促销是一种语言功能,允许从匿名嵌入式结构中访问来自匿名嵌入的struct的方法它们是包含结构的方法。这是通过遵循以下规则来实现的:
接口{} func(p props)getstring(键字符串)字符串{ 返回p [键]。(字符串) } 类型节点struct { 道具 } func main(){ 节点:= node {“ test”:“ foo”} fmt.println(node.getString(“ test”))//输出:foo }
在此示例中,节点struct嵌入了类型props的匿名结构。 This allows the GetString method from Props to be promoted to Node.
Alternative ApproachAn alternative approach without embedding is to use a pointer receiver.通过将指针传递给接收器函数,您可以访问基础结构的字段和方法,而无需嵌入。使用指针接收器: type props map [string] interface {} func(p *props)getstring(键字符串)字符串{ 返回p [键]。(字符串) } 类型节点struct { 道具 } func main(){ 节点:=&node {props {“ test”:“ foo”}} fmt.println(node.getString(“ test”))//输出:foo }
在此示例中,我们为getString方法使用指针接收器。这使我们能够访问基础道具结构的字段和方法,而无需嵌入它。结论[&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&华并不总是最好的选择。如果不需要或不需要方法促销,则使用指针接收器可以提供更灵活,更性能的替代方案。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3