Golang编辑从main()到函数的struts数组

时间:2014-09-11 18:38:45

标签: pointers struct go

希望你能在下面提供帮助,这是我代码的简洁版本。

基本上我将一个结构数组传递给floatInSlice(),其中一个新结构被添加到数组或现有结构AudienceCategory.Sum得到++

除了b.Sum = b.Sum + 1

外,一切正常

现在我知道如果我想将一个obect作为指针传递而不是值,我需要使用* /&但是我似乎无法让它发挥作用,任何帮助都很有用!

type AudienceCategory struct {
    Cat int
    Sum int
}


var counter = []AudienceCategory{}


func main() {
     for i := 1; i < len(words); i++ {
         counter = floatInSlice(category,counter)
        if counter != nil{}
     }
     fmt.Printf("%v ", counter) 
}


func floatInSlice(category int, counter *[]AudienceCategory) []AudienceCategory {
    for _, b := range counter {
        if b.Cat == category {
            b.Sum = b.Sum+1

            return counter
        }
    }
    x := AudienceCategory{Cat:category,Sum:1}
    counter = append( counter, x)
    return counter
}

编辑 *******

让它最终工作感谢帮助人员

func floatInSlice(category int, counter []AudienceCategory) []AudienceCategory {

    for i := 0; i < len(counter); i++ {
        if counter[i].Cat == category {
            counter[i].Sum = counter[i].Sum+1

            return counter
        }
    }
    x := AudienceCategory{Cat:category,Sum:1}
    counter = append( counter, x)
    return counter
}

1 个答案:

答案 0 :(得分:1)

当您使用_, b := range counter中的值范围时,b包含counter的每个元素的副本。所以你要总结一个丢失的副本,而不是切片中的元素。

你应该使用

func floatInSlice(category int, counter *[]AudienceCategory) []AudienceCategory {
    for i, b := range *counter {
        if b.Cat == category {
            (*counter)[i].Sum = (*counter)[i].Sum+1

            return counter
        }
    }
    x := AudienceCategory{Cat:category,Sum:1}
    counter = append( counter, x)
    return counter
}