gpt4 book ai didi

go - 接口(interface)实现元素的范围

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

假设我有以下接口(interface)和两个实现它的结构:

type Tmp interface {
MyTmp() string
}

type MyStructA struct {
ArrayOfItems []int
}

func (a MyStructA) MyTmp() string {
return "Hello World"
}

type MyStructB struct {
ArrayOfItems []int
}

func (a MyStructB) MyTmp() string {
return "Hello World B"
}
正如你所注意到的 MyStructAMyStructB实现 Tmp并且两者都有一个名为 ArrayOfItems 的属性。使用接口(interface)签名,我如何迭代两者都具有的属性?类似于:
func (c ADifferentStruct) iterate(myTmp Tmp) {

for _, number := range myTmp.ArrayOfItems {
fmt.Println(number)
}
}
注意:我不想在接口(interface)中添加另一个方法(即getter/setter)来处理或定义 ArrayOfItems这可能吗?

最佳答案

您需要一种方法来返回这些项目......
看到这个:
https://play.golang.org/p/rnH0riWKqRY


package main

import "fmt"

type Tmp interface {
MyTmp() string
Items() []int
}

type MyStructA struct {
ArrayOfItems []int
}

func (a MyStructA) MyTmp() string {
return "Hello World"
}

func (a MyStructA) Items() []int {
return a.ArrayOfItems
}

type MyStructB struct {
ArrayOfItems []int
}

func (a MyStructB) MyTmp() string {
return "Hello World B"
}

func (a MyStructB) Items() []int {
return a.ArrayOfItems
}

func iterate(tmp Tmp) {
for _, val := range tmp.Items() {
fmt.Println(val)
}
}

func main() {
a := MyStructA{[]int{1, 2, 3}}
b := MyStructA{[]int{-1, -2, -3}}
iterate(a)
iterate(b)

}


关于go - 接口(interface)实现元素的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63368027/

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