亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在不訴諸字符串、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 關注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號