How to update slice inside map

I'm struggling with updating a slice inside map rulesByCountry without any success. The value of enabled changes only inside the function UpdateName but the map itself still sees this value unchanged. I assume it's something to do with pointers. I guess I did not grasp the concept of it. Can someone direct me what I'm doing wrong here? I tried a lot of things and run out of options. I would appreciate any kind of help.


import (
    "fmt"
)
// Consts
const RuleSeparateStreetNameFromHome string = "Separate street number from home"

// Types
type Address struct {
    AddressLines []string
    Country      string
}

type RuleChain []RuleDefinition

type RuleDefinition struct {
    Name string
    Enabled bool
}

//Map
var rulesByCountry map[string][]RuleDefinition = map[string][]RuleDefinition{
    "DE": {
        {
            Name: RuleSeparateStreetNameFromHome,
            // TODO some logic,
            Enabled: false,
        },
    },
}

func main() {
    var addr *Address
    addr = &Address{
        AddressLines: []string{
            "Street3",
        },
        Country: "DE",
    }
    rules := GetRulesForCountry(addr.GetCountry())
    rules.UpdateName(RuleSeparateStreetNameFromHome)
    fmt.Println(rules)
}

func GetRulesForCountry(country string) RuleChain {
    if rules, ok := rulesByCountry[country]; ok {
        return rules
    }
    return nil
}

func (a *Address) GetFirstAddressLine() string {
    return a.GetAddressLine(1)
}

func (a *Address) GetAddressLine(lineNumber int) string {
    if lineNumber <= 0 {
        return ""
    }
    lines := a.GetAddressLines()
    if len(lines) >= lineNumber {
        return lines[lineNumber-1]
    }
    return ""
}

func (m *Address) GetAddressLines() []string {
    if m != nil {
        return m.AddressLines
    }
    return nil
}

func (r *RuleChain) UpdateName(name string) {
    for _, rule := range *r {
        if rule.Name == name {
            rule.Enabled = true
            fmt.Print(rule)
        }
    }
}

func (m *Address) GetCountry() string {
    if m != nil {
        return m.Country
    }
    return ""
}
 


from Recent Questions - Stack Overflow https://ift.tt/3BlqT7P
https://ift.tt/eA8V8J

Comments

Popular posts from this blog

Spring Elasticsearch Operations

Network Error and Timeout on Authorize.net JS

Object oriented programming concepts (OOPs)