3 回答
TA贡献1806条经验 获得超8个赞
如果您知道部分完全在全部范围之内,则可以使用复制功能。
func main() {
full := []byte{0, 0, 0, 0, 0, 0, 0}
part := []byte{1, 1, 1}
copy(full[2:], part)
fmt.Println(full)
}
但是,这将完全覆盖。如果要保留原件,可以先使用append函数进行复制。
func main() {
full := []byte{0, 0, 0, 0, 0, 0, 0}
part := []byte{1, 1, 1}
newFull := append([]byte{}, full...)
copy(newFull[2:], part)
fmt.Println("newFull: ", newFull)
fmt.Println("original full:", full)
}
请注意,这仍然具有原始代码的局限性,即该部分必须适合full的范围。
TA贡献1817条经验 获得超14个赞
为什么不使用append内置的?
func splice(full, part []byte, pos int) (ret []byte) {
ret = append(full[:pos], part...)
return append(ret, full[pos:]...)
}
这可能不是很快(很多复制),但是可读性很强。
TA贡献1796条经验 获得超7个赞
字符串的变体(拆分/拼接/连接)。
func stringSplice(full string, start, deleteCount int, item string) (ret string) {
if start > len(full) {
return full + item
}
ret = full[:start] + item
if start+deleteCount > len(full) {
return ret
}
return ret + full[start+deleteCount:]
}
- 3 回答
- 0 关注
- 187 浏览
添加回答
举报