簡體   English   中英

Golang將struts數組從main()編輯為function

[英]Golang edit array of struts from main() to function

希望您能在下面提供幫助,是我代碼的簡明版本。

基本上我將結構數組傳遞給floatInSlice(),其中將新結構添加到數組或現有結構AudienceCategory.Sum獲取++

除了b.Sum = b.Sum + 1以外,其他所有工具都正常工作

現在我知道,如果我想將對象傳遞為指針而不是值,則需要使用* /&,但我似乎無法使其正常運行,任何幫助都非常有用!

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
}

當使用值的范圍如_, b := range counterb包含的各元素的副本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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM