首页
学习
活动
专区
圈层
工具
发布

果浪片
EN

Stack Overflow用户
提问于 2017-01-31 14:09:05
回答 2查看 569关注 0票数 1

当我使用Golang添加到我的切片时,我遇到了问题。

这是我的代码:

代码语言:javascript
复制
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包含以下内容:

代码语言:javascript
复制
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。

谢谢你的帮助。

编辑:

代码现在如下所示:

代码语言:javascript
复制
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)
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-31 14:24:22

在这项任务中:

代码语言:javascript
复制
var beacondataXY = new(types.BeaconDataXY)

您正在创建一个类型为*types.BeaconDataXY的变量。只需创建一个像这样的新BeaconDataXY:

代码语言:javascript
复制
var beacondataXY = types.BeaconDataXY{}

当附加到您的数组时,可以这样做:

代码语言:javascript
复制
returnBeaconData = append(returnBeaconData, beacondataXY)

“.”假设beacondataXY是一个数组,但它不是,您只想将beacondataXY附加到returnBeaconData。关于什么“.”的解释,请参见slices。在这种情况下意味着。

票数 3
EN

Stack Overflow用户

发布于 2017-01-31 14:12:01

试试returnBeaconData = append(returnBeaconData, *beacondataXY)

new()内置函数返回指针,您也可以编写:

var beacondataXY = types.BeaconDataXY{}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41959651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档