我正在編寫一個函數來刪除字符串中的重復字符。這是我的方法。當我運行以下測試時,為什么會出現此錯誤?我是 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.gofunc TestRemoveDuplicateChars(t *testing.T) { got := removeDuplicateChars("abbcde") if got != "abcde" { t.Fatalf("removeDuplicateChars fails") }}
1 回答

ITMISS
TA貢獻1871條經驗 獲得超8個贊
因為您實際上還沒有 initilize/allocated m
,所以您只是聲明了它。做這個;var m map[string]int
進入m := map[string]int{}
。
在同一個語句中進行初始化和賦值。您還可以添加另一行m = make(map[string]int)
來防止錯誤,盡管我個人更喜歡壓縮語法。
僅供參考,您的代碼在此行中嘔吐;m[c_string[i]] = 0
,將錯誤消息與上述信息結合起來時,錯誤消息應該是有意義的。
- 1 回答
- 0 關注
- 203 瀏覽
添加回答
舉報
0/150
提交
取消