首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用字符串、strvconv等操作bytes.Buffer

不使用字符串、strvconv等操作bytes.Buffer
EN

Stack Overflow用户
提问于 2015-08-26 14:41:38
回答 1查看 165关注 0票数 1

我只是想在不诉诸strconv &string的情况下这样做,但我并不精通字节的工作:

代码语言:javascript
复制
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
}

建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-26 14:48:38

没有与[]byte函数等价的strconv.Parse* (参见第2632期)。目前,使用strconv是处理此问题的最简单方法。

但是,您忽略了第一个错误,这是一个错误。您还可以缩短几件事,并使用更常见的成语,即提前返回而不是增加缩进。我还会返回一个错误,而不是一个bool来获取更多的上下文信息。

代码语言:javascript
复制
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
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32229680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档