本文介绍了如果struct A嵌入到B中,那么A的访问方法和B的字段的方法是否可以?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

struct A {}

func(a * A)BName(id int)string {
return a .Name

$ b $ struct B {
* A
名称字符串
}

func main(){
b:=& B {名称:abc}
fmt.Println(b.Name)
}

代码失败,我想知道如何编写代码来实现,A.BName可以访问B的struct name属性

解决方案

这是不可能的。 struct A并不知道它嵌入的类型。想一想,A可以嵌入到任何其他结构中,所以你如何提前知道嵌入到A中的结构的类型。



如果你想这样做,你需要在B中引用外部结构B.

 类型A struct {
* B
}

func(a *)PrintName()字符串{返回aBName}

类型B struct {
A //不需要在这里使用指针
名称字符串
}

var b B
bAB =& b

fmt.Println(b.PrintName())


  struct A {}

  func (a *A) BName(id int) string {
     return a.Name
  }

  struct B {
     *A
     Name string
  }

  func main() {
     b := &B{Name: "abc"}
     fmt.Println(b.Name)
  }

the code failure, I want know how to write code to achieve, A.BName can access B struct attribute Name

解决方案

This is not possible. struct A does not know anything about the types it is embedded into. Think about it, A can be embedded into any other struct, so how could you know ahead of time the type of the struct that A is embedded into.

If you want to do this, you need to place a reference to B, the outer structure into A.

type A struct {
    *B 
}

func (a *A) PrintName() string { return a.B.Name }

type B struct {
    A // no need to use a pointer here
    Name string
}

var b B
b.A.B = &b

fmt.Println(b.PrintName())

这篇关于如果struct A嵌入到B中,那么A的访问方法和B的字段的方法是否可以?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-31 20:26