为了账号安全,请及时绑定邮箱和手机立即绑定

在不诉诸字符串、strvconv 等的情况下使用 bytes.Buffer

在不诉诸字符串、strvconv 等的情况下使用 bytes.Buffer

Go
喵喵时光机 2021-11-01 16:47:30
我只想在不求助于 strconv 和字符串的情况下执行此操作,但我不精通仅以字节为单位的工作:func rangeSeq(b *bytes.Buffer) ([][]byte, bool) {    q := bytes.Split(b.Bytes(), []byte{SEQ_RANGE})    if len(q) == 2 {        var ret [][]byte        il, lt := string(q[0]), string(q[1])        initial, err := strconv.ParseInt(il, 10, 64)        last, err := strconv.ParseInt(lt, 10, 64)        if err == nil {            if initial < last {                for i := initial; i <= last; i++ {                    out := strconv.AppendInt([]byte{}, i, 10)                    ret = append(ret, out)                }            }            return ret, true        }    }    return nil, false}建议?
查看完整描述

1 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

没有[]byte与 strconv.Parse* 函数等效的函数(请参阅issue 2632)。使用 strconv 是目前处理此问题的最简单方法。


但是,您忽略了第一个错误,这是一个错误。你也可以缩短一些东西,并使用更常见的习语提前返回而不是增加缩进。我也会返回一个错误,而不是返回更多上下文信息的 bool。


func rangeSeq(b *bytes.Buffer) ([][]byte, error) {

    q := bytes.Split(b.Bytes(), sep)

    if len(q) != 2 {

        return nil, fmt.Errorf("invalid value: %s", b)

    }


    var ret [][]byte


    initial, err := strconv.Atoi(string(q[0]))

    if err != nil {

        return nil, err

    }


    last, err := strconv.Atoi(string(q[1]))

    if err != nil {

        return nil, err

    }


    if initial < last {

        for i := initial; i <= last; i++ {

            ret = append(ret, strconv.AppendInt(nil, i, 10))

        }

    }

    return ret, nil

}


查看完整回答
反对 回复 2021-11-01
  • 1 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信