匿名结构体的问题

seetobest · 2022-01-23 11:42:21 · 945 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2022-01-23 11:42:21 的主题,其中的信息可能已经有所发展或是发生改变。

package main

import (
    "fmt"
)

type A struct {
    Name string
}

type B struct {
    A
    Name string
}

func (a *A) SayOK() {
    fmt.Println("a sayok....", a.Name)
}
func main() {
    var b B
    var a A
    b.A.Name = "AA"
    fmt.Println("b.name=", b.Name)  
    fmt.Println("a.name=", a.Name)
    b.SayOK()
}

//b.A.Name = "AA" 这里我有赋值操作,为什么b.Name和a.Name打印结果都是空呢?结构体B不是可以访问A的字段name吗?b.sayok这个方法为什么可以获取到a.Name的值呢?

go.png


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

945 次点击  
加入收藏 微博
6 回复  |  直到 2022-01-24 14:25:54
seetobest
seetobest · #1 · 3年之前

谢谢各位大佬,麻烦帮忙解答下

jinl80
jinl80 · #2 · 3年之前

b.Name 覆盖了b.A.Name, 要么删掉b.Name,要么改不同名字,要么用b.A.Name访问

seetobest
seetobest · #3 · 3年之前
jinl80jinl80 #2 回复

b.Name 覆盖了b.A.Name, 要么删掉b.Name,要么改不同名字,要么用b.A.Name访问

b.A.name="AA", 不就相当于给结构体A的name赋值了吗? 为什么a.name打印为空呢

jinl80
jinl80 · #4 · 3年之前

a是a,b是b,是两个不同的实例, 如果var b B; a := &b.A ; 这样才能实现你的意图

sharkLoc
sharkLoc · #5 · 3年之前

fmt.Println("b.name=", b.A.Name)

Srim_ycb
Srim_ycb · #6 · 3年之前

你这样写a和b.A除了类型一样,有什么关联吗?就好比你家里有条狗加阿黄,然后路上来了一条流浪狗,我问你这条流浪狗叫什么?

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传