zhcn 编程语言 Golang Golang 流程控制 非公開: Go语言嵌入结构体中成员名称冲突

Go语言嵌入结构体中成员名称冲突

嵌入结构可以具有相同的成员名称,但是如果成员具有相同的名称怎么办?下面给出了一个例子。

 package main

import (
    "fmt"
)

type A struct {
    a int
}

type B struct {
    a int
}

type C struct {
    A
    B
}

func main() {
    c := &C{}
    c.A.a = 1
    fmt.Println(c)
} 

代码说明如下:

  • 第 7 行和第 11 行定义了两个结构,每个结构都有一个 int 字段。
  • 第 15 行的结构中嵌入了 A 结构和 B 结构。
  • 第 21 行实例化了 C 结构。
  • 在第22行,按照常规方法访问嵌入结构A的字段a并赋值1。
  • 第23行可以成功打印实例化的C结构体。

然后将第 22 行更改为以下代码。

 func main() {
    c := &C{}
    c.a = 1
    fmt.Println(c)
} 

此时如果再次编译运行,编译器就会报错。

.\main.go:22:3: ambiguous selector c.a

编译器告诉 C 选择器 a 是不明确的,也就是说,它无法决定是将 1 赋给 A 中的字段 a 还是将 1 赋给 B 中的字段 a。

使用嵌入式结构时,Go 语言编译器非常智能,会警告您潜在的歧义和错误。

《Go语言中嵌入结构体成员名称冲突》浅显易懂的讲解!您必须观看的最佳 2 个视频

【Go言語 超入門コース】13.構造体|構造体ってなんだ? 異なるデータ型の変数を1つにまとめたもの【プログラミング初心者向け入門講座】
https://www.youtube.com/watch?v=T4BVT71X3MM&pp=ygVDIEdvIOiogOiqnuOBruWfi-OCgei-vOOBv-ani-mAoOS9k-OBruODoeODs-ODkOODvOWQjeOBruertuWQiCZobD1KQQ%3D%3D
【セイト先生】Go言語使う企業が増えてるって本当!?Go言語を使う企業の特徴は??#エンジニア #プログラミング #Go
https://www.youtube.com/watch?v=0DYzzYzEhvY&pp=ygVDIEdvIOiogOiqnuOBruWfi-OCgei-vOOBv-ani-mAoOS9k-OBruODoeODs-ODkOODvOWQjeOBruertuWQiCZobD1KQQ%3D%3D
嵌入结构可以具有相同的成员名称,但是如果成员具有相同的名称怎么办?下面给出了一个例子。

 package main

import (
    "fmt"
)

type A struct {
    a int
}

type B struct {
    a int
}

type C struct {
    A
    B
}

func main() {
    c := &C{}
    c.A.a = 1
    fmt.Println(c)
} 

代码说明如下:

  • 第 7 行和第 11 行定义了两个结构,每个结构都有一个 int 字段。
  • 第 15 行的结构中嵌入了 A 结构和 B 结构。
  • 第 21 行实例化了 C 结构。
  • 在第22行,按照常规方法访问嵌入结构A的字段a并赋值1。
  • 第23行可以成功打印实例化的C结构体。

然后将第 22 行更改为以下代码。

 func main() {
    c := &C{}
    c.a = 1
    fmt.Println(c)
} 

此时如果再次编译运行,编译器就会报错。

.\main.go:22:3: ambiguous selector c.a

编译器告诉 C 选择器 a 是不明确的,也就是说,它无法决定是将 1 赋给 A 中的字段 a 还是将 1 赋给 B 中的字段 a。

使用嵌入式结构时,Go 语言编译器非常智能,会警告您潜在的歧义和错误。

《Go语言中嵌入结构体成员名称冲突》浅显易懂的讲解!您必须观看的最佳 2 个视频

【Go言語 超入門コース】13.構造体|構造体ってなんだ? 異なるデータ型の変数を1つにまとめたもの【プログラミング初心者向け入門講座】
https://www.youtube.com/watch?v=T4BVT71X3MM&pp=ygVDIEdvIOiogOiqnuOBruWfi-OCgei-vOOBv-ani-mAoOS9k-OBruODoeODs-ODkOODvOWQjeOBruertuWQiCZobD1KQQ%3D%3D
【セイト先生】Go言語使う企業が増えてるって本当!?Go言語を使う企業の特徴は??#エンジニア #プログラミング #Go
https://www.youtube.com/watch?v=0DYzzYzEhvY&pp=ygVDIEdvIOiogOiqnuOBruWfi-OCgei-vOOBv-ani-mAoOS9k-OBruODoeODs-ODkOODvOWQjeOBruertuWQiCZobD1KQQ%3D%3D