1 回答

TA貢獻1821條經(jīng)驗 獲得超5個贊
為什么不將數(shù)據(jù)讀入結(jié)構(gòu)?下面的代碼使用反射來做到這一點(盡管沒有檢查字段的存在或類型)。
package main
import (
? ? "bufio"
? ? "fmt"
? ? "reflect"
? ? "strings"
)
type Entry struct {
? ? Title? ? string
? ? Content? string
? ? Metadata string
? ? Comments string
}
func main() {
? ? var input string = `title:stack|content:overflow|metadata:53|comments:none
title:google|content:website|metadata:213|comments:Demos
`
? ? var result = make(map[string]Entry)
? ? scanner := bufio.NewScanner(strings.NewReader(input))
? ? for scanner.Scan() {
? ? ? ? data := scanner.Text()
? ? ? ? data_arr := strings.Split(data, "|")
? ? ? ? entry := Entry{}
? ? ? ? for _, n := range data_arr {
? ? ? ? ? ? data_subdoc := strings.Split(n, ":")
? ? ? ? ? ? key, value := data_subdoc[0], data_subdoc[1]
? ? ? ? ? ? fmt.Println(key, value)
? ? ? ? ? ? field := strings.Title(key)
? ? ? ? ? ? reflect.Indirect(reflect.ValueOf(&entry)).FieldByName(field).SetString(value)
? ? ? ? }
? ? ? ? result[entry.Metadata] = entry
? ? }
? ? fmt.Printf("%+v\n", result["53"])
? ? fmt.Printf("%+v\n", result["213"])
}
- 1 回答
- 0 關(guān)注
- 151 瀏覽
添加回答
舉報