gpt4 book ai didi

go - 当我将外部结构的实例传递给外部结构实现的接口(interface) slice 时,无法访问嵌入式结构

转载 作者:行者123 更新时间:2023-12-01 22:33:26 26 4
gpt4 key购买 nike

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)
}
这给了我以下错误: ./prog.go:36:27: allSquares[0].name undefined (type twoDimensional has no field or method name)我对这里发生的事情感到困惑。 square 类型嵌入了 shape 类型,而 square 类型也实现了二维接口(interface)。
如果我将一个正方形的实例传递给二维 slice ,为什么我不能再从我的正方形访问类型形状?

最佳答案

接口(interface)本身没有.name属性。您需要使用类型断言 allSquares[0].(square)如下:

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)
}

关于go - 当我将外部结构的实例传递给外部结构实现的接口(interface) slice 时,无法访问嵌入式结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63973283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com