Why can't I key in a string in Golang map?

Nona :

I'm writing a function in go to remove duplicate characters in a string. Here is my approach. When I run the following test, why do I get this error? I'm new to Go and used to more dynamic languages like Ruby/Python.

panic: assignment to entry in nil map [recovered]
    panic: assignment to entry in nil map

source.go

func removeDuplicate(s string) string {
  var m map[string]int
    var c_string []string = strings.Split(s, "")
    for i :=0; i < len(c_string); i++ {
      m[c_string[i]] = 0
    }
    for i :=0; i < len(c_string); i++ {
      m[c_string[i]] = m[c_string[i]] + 1
    }
  var (
        result string = ""
    )
    for i :=0; i < len(c_string); i++ {
      if m[c_string[i]] < 1 {
      result  = result + c_string[i]
        }
    }
    return result
}

source_test.go

func TestRemoveDuplicateChars(t *testing.T) {
  got := removeDuplicateChars("abbcde")
    if got != "abcde" {
        t.Fatalf("removeDuplicateChars fails")
    }
}
evanmcdonnal :

Because you haven't actually initilize/allocated m, you've only declared it. Make this; var m map[string]int into m := map[string]int{}.

Which does initilization and assignment both in the same statement. You could also add another line m = make(map[string]int) which would prevent the error though I personally prefer the compacted syntax.

fyi your code is barfing on this line; m[c_string[i]] = 0, the error message should make sense when combining that with the information above.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related