3 回答
TA贡献1824条经验 获得超5个赞
好的,是的,这确实改变了问题。我立即想到的是,您只需要创建一个接口,例如Itemer并[]Itemer在函数定义中具有doSmth:
type Itemer interface {
Foo() bool
}
func doSmth(items []Itemer) {
...
}
不幸的是,这似乎是不可能的。然后我尝试了其他一些排列,包括 using interface{},[]interface{}以及可变参数函数,但我什么也做不了。
经过一番研究,结果证明 Go 不会转换切片的类型。即使切片的每个元素都是接口的实例,Itemer或者interface{}它仍然不会这样做。我无法重新找到源代码,但显然这是因为必须创建一个新切片,并且每个元素都必须从旧切片单独类型转换到新切片:https://stackoverflow。 com/a/7975763/2325784。
对我来说,这表明这样的功能doSmth是不可能的。
我唯一能建议的就是重构代码。如果您愿意发布更多信息Foo,doSmth我可以尝试提供帮助。
TA贡献1856条经验 获得超17个赞
Nvm,这行不通。忘记了 go 没有继承的事实。
您可以将数组转换为切片,并让函数将切片作为参数。
names := []string{"leto", "paul", "teg"}
process(names[:])
func process(names []string) {
...
}
TA贡献1878条经验 获得超4个赞
您可以使用基本数组概念调用这种类型的结构值数组:在此示例中,[]item 应称为 item.Item[i].Unitprice
我希望你会有一些想法
type UserItem struct {
UniqueID string `json:"uniqueID" bson:"uniqueID,omitempty"`
Item []Item
}
//Item : ""
type Item struct {
ProductName string `json:"productName" bson:"productName,omitempty"`
UnitPrice float64 `json:"unitPrice" bson:"unitPrice,omitempty"`
Quantity float64 `json:"quantity" bson:"quantity,omitempty"`
//main : ""
func main(){
for i := 0; i < len(item.Item); i++ {
SubTotal := item.Item[i].UnitPrice * item.Item[i].Quantity
TotalTax := (item.Item[i].TaxPercentage / 100)
TotalTax = SubTotal * TotalTax
Tax := SubTotal + TotalTax
fmt.Println(Tax)
}
- 3 回答
- 0 关注
- 170 浏览
添加回答
举报