func ParseportsFromFile(file string) (map[string]string, error) {
buf, err := ioutil.ReadFile(file)
if err != nil {
return nil, err
}
ret := [make(map[string]string)]
rows := strings.Split(string(buf), "\n")
for _, row := range rows {
kvs := strings.SplitN(row, "=", 2)
if len(kvs) == 2 {
ret[strings.TrimSpace(kvs[0])] = strings.TrimSpace(kvs[1])
}
}
return ret, nil
}
此功能允許我讀取這樣的檔案:
user1=123
user1=321
user2=124
但是,資料回傳是
map[user1:321 user2:124]
所以這意味著 user1=123 已被 user1=321 覆寫如何避免這種情況?如何創建像 map[user1:[123,321], user2: 124] 這樣的陣列以避免一個專案覆寫另一個?
uj5u.com熱心網友回復:
由于 go 是強型別的,因此立即將其變為切片映射會更容易。例如,參見http.Header型別。他們在設計時也有同樣的問題要解決。
在您的情況下,這可能看起來像這樣:
result := make(map[string][]string)
for _, row := range rows {
parts := strings.Split(row, "=")
key := parts[0]
value := parts[1]
result[key] = append(result[key], value)
}
https://go.dev/play/p/5uRH-aQmATR
否則,您需要使用interface{}(any) 以便同時擁有string和[]string,但是完成該操作的邏輯會更復雜,并且使用它也會更復雜,因為您總是需要檢查它是什么并進行型別斷言等等。畢竟,我不會推薦它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/475622.html
