gpt4 book ai didi

go - 在不求助于字符串、strvconv 等的情况下处理 bytes.Buffer

转载 作者:IT王子 更新时间:2023-10-29 01:59:19 25 4
gpt4 key购买 nike

我只想在不求助于 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
}

建议?

最佳答案

没有 []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
}

关于go - 在不求助于字符串、strvconv 等的情况下处理 bytes.Buffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32229680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com