1 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
問(wèn)題是您正在每個(gè)調(diào)用中初始化“key”的嵌套映射,因此它始終覆蓋以前的數(shù)據(jù)。
所以只需改變你的線路
retMap[key] = make(map[string]string) // If not assign here then it gives runtime error "panic: assignment to entry in nil map"
到下面應(yīng)該使您的代碼工作:
=_, ok := retMap[key]
if !ok {
retMap[key] = make(map[string]string)
}
我只是檢查為“鍵”存儲(chǔ)的值是否存在,如果不存在則初始化一個(gè)新映射。
更新:
我還重寫了您的代碼,以使用 Go 提供的一些內(nèi)置函數(shù),如strings.Split或strings.Trim*函數(shù)。它可能會(huì)有所幫助。
package main
import (
"fmt"
"strconv"
"strings"
)
const str = "Hello @John martin #sosos &Hi @William "
func main() {
retMap := make(map[string]map[string]string)
retMap["group"] = make(map[string]string)
retMap["user"] = make(map[string]string)
retMap["hashTag"] = make(map[string]string)
list := strings.Split(strings.TrimSpace(str), " ")
for _, value := range list {
firstCharacter := string(value[0])
if firstCharacter == "@" {
retMap["user"][strconv.Itoa(len(retMap["user"])+1)] = strings.TrimLeft(value, "@")
} else if firstCharacter == "&" {
retMap["group"][strconv.Itoa(len(retMap["group"])+1)] = strings.TrimLeft(value, "&")
} else if firstCharacter == "#" {
retMap["hashTag"][strconv.Itoa(len(retMap["hashTag"])+1)] = strings.TrimLeft(value, "#")
}
}
fmt.Println("Final String ", retMap)
}
- 1 回答
- 0 關(guān)注
- 168 瀏覽