嵌入结构可以具有相同的成员名称,但是如果成员具有相同的名称怎么办?下面给出了一个例子。
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つにまとめたもの【プログラミング初心者向け入門講座】
【セイト先生】Go言語使う企業が増えてるって本当!?Go言語を使う企業の特徴は??#エンジニア #プログラミング #Go




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

