登录
首页 >  Golang >  Go问答

问题:在接口{}中添加附加信息

来源:stackoverflow

时间:2024-03-22 16:21:30 405浏览 收藏

在接口切片中添加记录集合时,预期第一个集合附加在切片开头,第二个集合附加在结尾。然而,实际结果是第二个集合覆盖了第一个集合,导致切片中仅存在第二个集合。这是因为切片是对底层数组的视图,而不是一个独立的实体。当尝试通过切片操作清空集合时,实际上并没有创建一个新的空切片,而是将底层数组元素覆盖为零长度。要解决此问题,需要使用 make([]recordtype,0) 或 []recordType{} 来创建一个新切片。

问题内容

为了跟进我的上一个问题,我再次尝试:

我创建了一个记录集合 (ma​​p[string]string)

当我将两个不同的集合附加到接口切片时:var db []interface{}

我期望的是db[0] collection1和db[1] collection2

我得到的是db[0] collection2和db[1] collection2

以下是活动代码:

record = append(record, newworkdataitem("fwc", d, "left", "---", "10", "12.5"))
record = append(record, newworkdataitem("fwc", d, "left", "---", "10", "12.5"))
fmt.println("record 1: ", record)
db = append(db, record)
fmt.println("database1 = ", db)

record = record[:0]
fmt.println("record: ", record)
record = append(record, newworkdataitem("fwt", d, "left", "---", "15", "12.5"))
record = append(record, newworkdataitem("fwt", d, "right", "---", "15", "12.5"))

fmt.println("record 2: ", record)
db = append(db, record)
fmt.println("database2 = ", db)
fmt.println("db[0] ", db[0])
fmt.println("db[1] ", db[1])

结果如下:

Record 1:  [map[Data:11 27 2019 Exercise:FWC Notes:--- Reps:10 Side:Left Weight:12.5] map[Data:11 27 2019 Exercise:FWC Notes:--- Reps:10 Side:Left Weight:12.5]]

Database1 =  [[map[Data:11 27 2019 Exercise:FWC Notes:--- Reps:10 Side:Left Weight:12.5] map[Data:11 27 2019 Exercise:FWC Notes:--- Reps:10 Side:Left Weight:12.5]]]

Record:  []

Record 2:  [map[Data:11 27 2019 Exercise:FWT Notes:--- Reps:15 Side:Left Weight:12.5] map[Data:11 27 2019 Exercise:FWT Notes:--- Reps:15 Side:Right Weight:12.5]]

Database2 =  [[map[Data:11 27 2019 Exercise:FWT Notes:--- Reps:15 Side:Left Weight:12.5] map[Data:11 27 2019 Exercise:FWT Notes:--- Reps:15 Side:Right Weight:12.5]] [map[Data:11 27 2019 Exercise:FWT Notes:--- Reps:15 Side:Left Weight:12.5] map[Data:11 27 2019 Exercise:FWT Notes:--- Reps:15 Side:Right Weight:12.5]]]

db[0]  [map[Data:11 27 2019 Exercise:FWT Notes:--- Reps:15 Side:Left Weight:12.5] map[Data:11 27 2019 Exercise:FWT Notes:--- Reps:15 Side:Right Weight:12.5]]

db[1]  [map[Data:11 27 2019 Exercise:FWT Notes:--- Reps:15 Side:Left Weight:12.5] map[Data:11 27 2019 Exercise:FWT Notes:--- Reps:15 Side:Right Weight:12.5]]

正如您所看到的,通过将新集合附加到“db”似乎不仅会覆盖第一个集合,然后还会附加新集合。

所以我们得到了collection2,collection2而不是collection1,collection2


解决方案


切片是数组的视图。当你这样做时:

record = record[:0]

您没有创建新的空切片。您仍在使用底层数组,新切片将其视为长度为 0 的切片。当您将新元素附加到 record 时,您将覆盖底层数组元素。

将上面的语句替换为:

record = make([]recordtype,0)

record= []recordType{}

使用新切片进行记录。

以上就是《问题:在接口{}中添加附加信息》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>