Go 当我将外部结构的实例传递到外部结构实现的接口切片中时,无法访问嵌入式结构

Go 当我将外部结构的实例传递到外部结构实现的接口切片中时,无法访问嵌入式结构,go,struct,interface,slice,Go,Struct,Interface,Slice,这给了我以下错误: ./prog.go:36:27:allSquares[0]。名称未定义类型twoDimensional没有字段或方法名称 我对这里发生的事感到困惑。Type square嵌入了Type shape,Type square还实现了二维接口 如果我将square的一个实例传递到一个二维片段中,为什么我不能再从square访问类型shape?接口本身没有.name属性。您需要使用类型断言allSquares[0]。Squares如下所示: package main import

这给了我以下错误: ./prog.go:36:27:allSquares[0]。名称未定义类型twoDimensional没有字段或方法名称

我对这里发生的事感到困惑。Type square嵌入了Type shape,Type square还实现了二维接口


如果我将square的一个实例传递到一个二维片段中,为什么我不能再从square访问类型shape?

接口本身没有.name属性。您需要使用类型断言allSquares[0]。Squares如下所示:

package main

import (
    "fmt"
)

type shape struct {
    name string
}

type square struct {
    shape
    length int
}

type twoDimensional interface {
    area() int
}

func (s square) area() int {
    return s.length * s.length
}


func main() {
    s1 := square{
        length: 2,
    }
    s1.name = "spongebob"
    
    
    allSquares := []twoDimensional{
        s1,
    }
    
    fmt.Println(allSquares[0].name)
}
package main

import (
    "fmt"
)

type shape struct {
    name string
}

type square struct {
    shape
    length int
}

type twoDimensional interface {
    area() int
}

func (s square) area() int {
    return s.length * s.length
}

func main() {
    s1 := square{
        length: 2,
    }
    s1.name = "spongebob"

    allSquares := []twoDimensional{
        s1,
    }

    fmt.Println(allSquares[0].(square).name)
}