当我使用Golang添加到我的切片时,我遇到了问题。
这是我的代码:
func MatchBeaconWithXY(w http.ResponseWriter, r *http.Request) ([]types.BeaconDataXY, error) {
context := appengine.NewContext(r)
returnBeaconData := []types.BeaconDataXY{}
beacondata, err := GetBeaconData(w, r)
if err != nil {
log.Errorf(context, "error getting beacondata %v", err)
w.WriteHeader(http.StatusInternalServerError)
return nil, err
}
for index, element := range beacondata {
q := datastore.NewQuery("physicalbeacondata").Filter("NamespaceID =", element.NamespaceID).Filter("InstanceID =", element.InstanceID)
beacondatastatic := []types.BeaconDataStatic{}
_, err := q.GetAll(context, &beacondatastatic)
if err != nil {
log.Errorf(context, "cant get query %v", err)
w.WriteHeader(http.StatusInternalServerError)
return nil, err
}
var beacondataXY = new(types.BeaconDataXY)
beacondataXY.NamespaceID = element.NamespaceID
beacondataXY.InstanceID = element.InstanceID
beacondataXY.XCoord = beacondatastatic[0].XCoord
beacondataXY.YCoord = beacondatastatic[0].YCoord
beacondataXY.Distance = element.Distance
returnBeaconData = append(returnBeaconData, beacondataXY...)
log.Infof(context, "beaondataXY tot %v", beacondataXY)
}beacondataxy.go包含以下内容:
package types
type BeaconDataXY struct {
InstanceID string
NamespaceID string
XCoord float64
YCoord float64
Distance float64
}错误消息如下:
utils.go:139:不能将beacondataXY (类型*types.BeaconDataXY)用作追加的[]types.BeaconDataXY类型
我真的不知道如何在Golang处理切片,即使在阅读了一些非常有意义的教程之后。我不知道我做错了什么。
我想要一个包含类型的数组/片,返回BeaconData是[]类型。BeaconDataXY和它应该包含单一类型的BeaconDataXY。
谢谢你的帮助。
编辑:
代码现在如下所示:
func MatchBeaconWithXY(w http.ResponseWriter, r *http.Request) ([]types.BeaconDataXY, error) {
context := appengine.NewContext(r)
//returnBeaconData := []types.BeaconDataXY{}
returnBeaconData := make([]types.BeaconDataXY, 1)
beacondata, err := GetBeaconData(w, r)
if err != nil {
log.Errorf(context, "error getting beacondata %v", err)
w.WriteHeader(http.StatusInternalServerError)
return nil, err
}
for _, element := range beacondata {
q := datastore.NewQuery("physicalbeacondata").Filter("NamespaceID =", element.NamespaceID).Filter("InstanceID =", element.InstanceID)
beacondatastatic := []types.BeaconDataStatic{}
_, err := q.GetAll(context, &beacondatastatic)
if err != nil {
log.Errorf(context, "cant get query %v", err)
w.WriteHeader(http.StatusInternalServerError)
return nil, err
}
var beacondataXY = types.BeaconDataXY{}
beacondataXY.NamespaceID = element.NamespaceID
beacondataXY.InstanceID = element.InstanceID
beacondataXY.XCoord = beacondatastatic[0].XCoord
beacondataXY.YCoord = beacondatastatic[0].YCoord
beacondataXY.Distance = element.Distance
returnBeaconData = append(returnBeaconData, beacondataXY)
//log.Infof(context, "beaondataXY tot %v", beacondataXY)
}发布于 2017-01-31 14:24:22
在这项任务中:
var beacondataXY = new(types.BeaconDataXY)您正在创建一个类型为*types.BeaconDataXY的变量。只需创建一个像这样的新BeaconDataXY:
var beacondataXY = types.BeaconDataXY{}当附加到您的数组时,可以这样做:
returnBeaconData = append(returnBeaconData, beacondataXY)“.”假设beacondataXY是一个数组,但它不是,您只想将beacondataXY附加到returnBeaconData。关于什么“.”的解释,请参见slices。在这种情况下意味着。
发布于 2017-01-31 14:12:01
试试returnBeaconData = append(returnBeaconData, *beacondataXY)
new()内置函数返回指针,您也可以编写:
var beacondataXY = types.BeaconDataXY{}
https://stackoverflow.com/questions/41959651
复制相似问题