Is there any difference between struct embedding and defining a field with the struct you want to embed?

Calin Baenen - May 24 '21 - - Dev Community

So I'm looking at this article on Structure Embedding in GoLang.
When reading, I came upon this: "Note that the access co.b is a syntactic convenience; we can also do it more explicitly with co.Base.b.".

So if that's just a "syntactic convenience", is structure embedding equal to just adding a field?
E.g.

type A struct {
  Msg string;
}
func (this *A) Print() {
  fmt.Println("A: "+this.Msg);
}

type B struct {
  A;
}
func (this *B) Print() {
  fmt.Println("B: "+this.Msg);
}
Enter fullscreen mode Exit fullscreen mode

==

type A struct {
  Msg string;
}
func (this *A) Print() {
  fmt.Println("A: "+this.Msg);
}

type B struct {
  A A;
}
func (this *B) Print() {
  fmt.Println("B: "+this.A.Msg);
}
Enter fullscreen mode Exit fullscreen mode



Putting:

package main;

import "fmt";



type A struct {
  Msg string;
}
func (this *A) Print() {
  fmt.Println("A: "+this.Msg);
}

type B struct {
  A;
}
func (this *B) Print() {
  fmt.Println("B: "+this.Msg);
}

func main() {
  var test B = B{};
  test.Msg = "Hello!";

  test.A.Print();
  test.Print();
}
Enter fullscreen mode Exit fullscreen mode

into SoloLearn's Go playground that seems to be the case.


So is there any difference, or am I right about them being the exact same thing?

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .