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 關注
- 213 瀏覽
添加回答
舉報