为什么我不能在Golang地图中键入字符串?

时间:2015-07-06 23:00:04

标签: go

我正在写一个函数去删除字符串中的重复字符。这是我的方法。当我运行以下测试时,为什么会出现此错误?我是Go的新手,习惯了更多动态语言,比如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 个答案:

答案 0 :(得分:6)

因为您还没有实际初始化/分配m,所以您只是声明了它。做这个; var m map[string]int m := map[string]int{}。{/ p>

在同一声明中,哪个启动和分配。您还可以添加另一行m = make(map[string]int),这可以防止错误,但我个人更喜欢压缩语法。

你的代码正在这条线上扒手; m[c_string[i]] = 0,将错误信息与上述信息相结合时,错误信息应该有意义。