"go学习笔记:具有相同声明的未命名类型被视为同一类型"的疑问

关于雨痕的"go学习笔记",1.8 自定义类型
具有相同声明的未命名类型被视为同一类型:具有相同字段序列(字段名、类型、标签、顺序) 的匿名struct //我用下面的代码测试了一下,报错了

type X struct {
    x string `a`
    y int    `b`
}

type Y struct {
    x string `a`
    y int    `b`
}

type A struct {
    X
}
type B struct {
    Y
}

func main() {
    a := A{}
    b := B{}

    a.X = b.Y

    fmt.Println(a, b)
}

运行后报:cannot use b,Y (type Y) as type X in assignment.

能帮我解答一下吗?谢谢

共 4 个回复


Bluek404

a是X类型的,不能被赋值Y类型的

就像一个string的变量不能赋值为123这样

# 0

jimmykuu

注意是匿名 struct,你的代码是匿名字段,AB是两个类型。

这段代码才是匿名struct,变量b的类型由于和a具有相同的字段序列,因此可以把a赋值给b。

package main

import "fmt"

func main() {
    a := struct {
        x string
        y int
    }{"x", 1}

    var b struct {
        x string
        y int
    } = a
    fmt.Println(a, b)
}
# 1

Bluek404

具有相同声明的未命名类型被视为同一类型

楼主你定义了两个类型

# 2

chenhao

谢谢 弄混概念了

# 3