I'm not sure my approach is right or if its too hackish. Is there a way to improve this code?

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
}

The string being parsed is:

Lv:400,STR:9999,AGI:8888,STM:7777,SPR:6666,WIS:5555,CON:4444,KI:3999999999,EXP:1