-1
我不确定我的方法是否正确,或者它是否太恶心。有没有办法改善这个代码?Golang将字符串拆分并解析为不同的类型
func splitStatValues(data string) (uint16, uint16, uint16, uint16, uint16, uint16, uint16, uint32, uint32) {
vals := strings.SplitN(data, ",", 9)
var lv, str, agi, stm, spr, wis, con uint16
var ki, exp uint32
for _, s := range vals {
xe := strings.SplitN(s, ":", 2)
if xe[0] == "Lv" {
_lv, _ := strconv.ParseUint(xe[1], 10, 16)
lv = uint16(_lv)
}
if xe[0] == "STR" {
_str, _ := strconv.ParseUint(xe[1], 10, 16)
str = uint16(_str)
}
if xe[0] == "AGI" {
_agi, _ := strconv.ParseUint(xe[1], 10, 16)
agi = uint16(_agi)
}
if xe[0] == "STM" {
_stm, _ := strconv.ParseUint(xe[1], 10, 16)
stm = uint16(_stm)
}
if xe[0] == "SPR" {
_spr, _ := strconv.ParseUint(xe[1], 10, 16)
spr = uint16(_spr)
}
if xe[0] == "WIS" {
_wis, _ := strconv.ParseUint(xe[1], 10, 16)
wis = uint16(_wis)
}
if xe[0] == "CON" {
_con, _ := strconv.ParseUint(xe[1], 10, 16)
con = uint16(_con)
}
if xe[0] == "KI" {
_ki, _ := strconv.ParseUint(xe[1], 10, 32)
ki = uint32(_ki)
}
if xe[0] == "EXP" {
_exp, _ := strconv.ParseUint(xe[1], 10, 32)
exp = uint32(_exp)
}
}
return lv, str, agi, stm, spr, wis, con, ki, exp
}
正在解析的字符串是:
Lv:400,STR:9999,AGI:8888,STM:7777,SPR:6666,WIS:5555,CON:4444,KI:3999999999,EXP:1
我可以说服你把这个字符串放在大括号中,引用字符串,然后使用json库将它解析成一个结构体?看起来像一个更简洁的解决方案。 – voutasaurus