0

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")
    }
}

1 Answer 1

6

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.