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

我正在编写一个函数来删除字符串中的重复字符。这是我的方法。当我运行以下测试时,为什么会出现此错误?我是 Go 的新手,习惯了更动态的语言,比如 Ruby/Python。


panic: assignment to entry in nil map [recovered]

    panic: assignment to entry in nil map

源码


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

    }

}


烙印99
浏览 177回答 1
1回答

ITMISS

因为您实际上还没有 initilize/allocated&nbsp;m,所以您只是声明了它。做这个;var m map[string]int进入m := map[string]int{}。在同一个语句中进行初始化和赋值。您还可以添加另一行m = make(map[string]int)来防止错误,尽管我个人更喜欢压缩语法。仅供参考,您的代码在此行中呕吐;m[c_string[i]] = 0,将错误消息与上述信息结合起来时,错误消息应该是有意义的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go