Go 戈朗片

Go 戈朗片,go,slice,Go,Slice,我在使用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 !

我在使用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(type*types.beacondataXY)用作 追加中的type[]types.BeaconDataXY

我真的不知道如何在Golang中处理切片,即使在阅读了一些非常有意义的教程之后。我不确定我做错了什么

我想有一个数组/切片,里面有类型,return 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)
    }
var beacondataXY = types.BeaconDataXY{}
returnBeaconData = append(returnBeaconData, beacondataXY)

尝试
returnBeaconData=append(returnBeaconData,*beacondataXY)

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


var beacondataXY=types.beacondataXY{}
Try
returnBeaconData=append(returnBeaconData,*beacondataXY)

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

var beacondataXY=types.beacondataXY{}

使用此赋值:

var beacondataXY = new(types.BeaconDataXY)
您正在创建*types.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)
    }
var beacondataXY = types.BeaconDataXY{}
returnBeaconData = append(returnBeaconData, 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)
    }
var beacondataXY = types.BeaconDataXY{}
returnBeaconData = append(returnBeaconData, beacondataXY)
“…”将假定beacondataXY是一个数组,但它不是,您只想将beacondataXY附加到returnBeaconData。有关此上下文中“…”含义的解释,请参见。

本作业:

var beacondataXY = new(types.BeaconDataXY)
您正在创建*types.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)
    }
var beacondataXY = types.BeaconDataXY{}
returnBeaconData = append(returnBeaconData, 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)
    }
var beacondataXY = types.BeaconDataXY{}
returnBeaconData = append(returnBeaconData, beacondataXY)


“…”将假定beacondataXY是一个数组,但它不是,您只想将beacondataXY附加到returnBeaconData。有关“…”在本文中的含义的解释,请参阅。

http:panic serving 127.0.0.1:56095:运行时错误:索引超出范围goroutine 7[正在运行]:
returnBeaconData
是一个片段。索引超出范围发生在数组上。我遇到了这个问题,我想我做了我所做的,以消除索引超出范围的错误。虽然它不起作用,但后来发生了什么?更改您所说的内容时,我发现错误索引超出范围?@simonnilsonguldstrand 1389是行号http:panic serving 127.0.0.1:56095:运行时错误:索引超出范围goroutine 7[运行]:
returnBeaconData
是一个片段。索引超出范围发生在数组上。我遇到了这个问题,我想我做了我所做的,以消除索引超出范围的错误。虽然它不起作用,但后来发生了什么?更改您所说的内容时,我得到的错误索引超出范围?@Simonnilsonguldstrand 1389是根据此更新的行号,但问题与我在另一个解决方案中回答的问题相同。索引超出范围请发布完整的堆栈跟踪。如何查看堆栈跟踪?或者堆栈跟踪是整个错误输出?请参阅前面的评论,发布了一个带有整个堆栈跟踪的imgur链接handlers/utils.go?的第136行中有什么内容?已根据该内容进行了更新,但仍然存在与我在其他解决方案中回答的问题相同的问题。索引超出范围请发布完整的堆栈跟踪。如何查看堆栈跟踪?或者堆栈跟踪是整个错误输出?请参阅前面的评论,发布了一个带有整个堆栈跟踪的imgur链接handlers/utils.go的第136行中有什么?