gpt4 book ai didi

http - 根据golang中的字节长度拆分字符串

转载 作者:IT王子 更新时间:2023-10-29 01:53:52 24 4
gpt4 key购买 nike

http 请求头有 4k 的长度限制。我想根据此限制拆分要包含在标题中的字符串。我应该先使用 []byte(str) 拆分然后使用 string([]byte) 为每个拆分部分转换回字符串吗?有没有更简单的方法呢?

最佳答案

在 Go 中,字符串实际上只是一个字节序列,indexing a string produces bytes .所以你可以简单地将你的字符串分割成 4kB 的子字符串。

但是,由于 UTF-8 字符可以跨越多个字节,因此您可能会在字符序列的中间拆分。如果分割后的字符串总是在解码之前在另一端以相同的顺序再次连接在一起,这不是问题,但是如果您尝试单独解码每个字符串,则可能会得到无效的前导或尾随字节序列。如果您想防止这种情况发生,您可以使用 unicode/utf8 包来检查您是否在有效的前导字节上进行拆分,如下所示:

package httputil

import "unicode/utf8"

const maxLen = 4096

func SplitHeader(longString string) []string {
splits := []string{}

var l, r int
for l, r = 0, maxLen; r < len(longString); l, r = r, r+maxLen {
for !utf8.RuneStart(longString[r]) {
r--
}
splits = append(splits, longString[l:r])
}
splits = append(splits, longString[l:])
return splits
}

直接 slice 字符串比转换为 []byte 并返回更有效,因为 string 是不可变的,而 []byte 不是,数据必须在转换时复制到新内存,花费 O(n) 时间(双向!),而 slice 字符串只是返回一个新的字符串头,由与原始数组相同的数组支持(花费常数时间) ).

关于http - 根据golang中的字节长度拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52323044/

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