自定义类型的Golang切片在另一个类型中作为参考

用户1467267:

我的Go测试代码出现此错误:

$ go run test.go 
# command-line-arguments
./test.go:43: cannot use &ol1 (type *Orderline) as type Orderline in array element
./test.go:43: cannot use &ol2 (type *Orderline) as type Orderline in array element

package main

import (
    "fmt"
)

type Customer struct {
    Id int64
    Name string
}

type Order struct {
    Id int64
    Customer *Customer
    Orderlines *[]Orderline
}

type Orderline struct {
    Id int64
    Product *Product
    Amount int64
}

type Product struct {
    Id int64
    Modelnr string
    Price float64
}

func (o *Order) total_amount() float64 {
    return 0.0 // Total amount collector for each Orderline goes here
}

func main() {
    c := Customer{1, "Customername"}

    p1 := Product{30, "Z97", 9.95}
    p2 := Product{31, "Z98", 25.00}

    ol1 := Orderline{10, &p1, 2}
    ol2 := Orderline{11, &p2, 6}

    ols := []Orderline{&ol1, &ol2}

    o := Order{1, &c, &ols}

    fmt.Println(o)
}

我也尝试直接在Order中追加到Slice,但是它也失败了:

o := new(Order)
o.Id = 1
o.Customer = &c
append(o.Orderlines, &ol1, &ol2)

抛出:

$ go run test.go 
# command-line-arguments
./test.go:48: append(o.Orderlines, &ol1, &ol2) evaluated but not used
mortdeus:

问题是您试图将Orderline指针放入需要Orderline值的切片中。

type Order struct {
    Id int64
    Customer *Customer
    Orderlines *[]Orderline
}

从更改此字段的类型

Orderlines *[]Orderline

至...

Orderlines []*Orderline

您还需要更改...

ols := []Orderline{&ol1, &ol2}

ols := []*Orderline{&ol1, &ol2}

在大多数情况下,定义* [] slicetype是多余的,因为slice,map和channel已经是引用类型。换句话说,如果将main中定义的slice的值传递给函数,则对复制的slice的索引所做的更改也会使main中定义的原始slice发生变化。

但是,请务必注意,由于将数据附加到切片而导致单个副本的基础阵列被迫增加其容量时,切片会彼此分离。因此,在某些情况下,您可能会找到指向理想切片甚至必要切片的指针。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用自定义帖子类型作为另一个帖子类型 wordpress 的类别

创建自定义类型,当检查Golang类型时,它看起来会像另一个

转到另一个结构中的自定义结构类型

如何使用go和mongodb获取在另一个结构中定义的结构类型的切片

指针的切片到类型的切片到另一个的切片之间的Golang类型转换

当自定义类型帖子与另一个自定义类型帖子有连接时,如何获取自定义类型帖子数据?

通过另一个插件的 meta_value 在 WordPress 中订购自定义帖子类型

通过单击另一个页面模板中的帖子标题,可以在特定的自定义wordpress模板中打开自定义帖子类型。

如何遍历自定义类型列表并从另一个列表替换一个属性?

每当创建另一个自定义帖子类型时创建自定义帖子类型

在另一个自定义 UIView 中嵌入自定义 UITableViewCell?

通过反射将类型“ interface {}”转换为类型“ interface {}”的切片中的另一个接口

在 B2C 自定义策略中将一种声明类型从一个步骤转移到另一个步骤

如何使用其他自定义指令中的元素标签作为另一个自定义指令的模板

定义作为另一个子集的对象类型

如何在另一个类型的定义中与嵌套类型相交

如何在Golang中将自定义类型切片转换为原始切片?

自定义参考类型

使用另一个向量定义的自定义间隔对向量中的Bin值

通过引用传递自定义切片类型

为自定义类型实现切片

制作一个自定义类型的帖子

从另一个文件使用Typescript类型定义

当自定义绘画代码在另一个类中时,不执行自定义绘画

Node.js:在另一个自定义类中引用自定义类

在另一个自定义UIView中设置/更改嵌套自定义UIView的变量

将自定义注册块导入到Gutenberg中的另一个自定义块

CSS 自定义属性作为另一个属性的后备值而不是固定(预定义)值

如何使用另一个数组的元素作为索引来切片张量流中的张量?