|
|
@@ -26,19 +26,21 @@
|
|
|
|
|
|
**注意**: append 在大多数情况下很好用,但是如果你想完全掌控整个追加过程,你可以实现一个这样的 AppendByte 方法:
|
|
|
|
|
|
- func AppendByte(slice []byte, data ...byte[]) []byte {
|
|
|
- m := len(slice)
|
|
|
- n := m + len(data)
|
|
|
- if n > cap(slice) { // if necessary, reallocate
|
|
|
- // allocate doublke what's needed, for future growth.
|
|
|
- newSlice := make([]byte, (n+1)*2)
|
|
|
- copy(newSlice, slice)
|
|
|
- slice = newSlice
|
|
|
- }
|
|
|
- slice = slice[0:n]
|
|
|
- copy(slice[m:n], data)
|
|
|
- return slice
|
|
|
+```go
|
|
|
+func AppendByte(slice []byte, data ...byte) []byte {
|
|
|
+ m := len(slice)
|
|
|
+ n := m + len(data)
|
|
|
+ if n > cap(slice) { // if necessary, reallocate
|
|
|
+ // allocate doublke what's needed, for future growth.
|
|
|
+ newSlice := make([]byte, (n+1)*2)
|
|
|
+ copy(newSlice, slice)
|
|
|
+ slice = newSlice
|
|
|
}
|
|
|
+ slice = slice[0:n]
|
|
|
+ copy(slice[m:n], data)
|
|
|
+ return slice
|
|
|
+}
|
|
|
+```
|
|
|
|
|
|
`func copy(dst, src []T) int` copy 方法将类型为 T 的 slice 从源地址 src 拷贝到目标地址 dst,覆盖 dst 的相关元素,并且返回拷贝的元素个数。源地址和目标地址可能会有重叠。拷贝个数是 src 和 dst 的长度最小值。如果 src 是字符串那么元素类型就是 byte。如果你还想继续使用 src,在拷贝技术后执行 src =dst。
|
|
|
|
|
|
@@ -54,4 +56,4 @@
|
|
|
|
|
|
- [目录](directory.md)
|
|
|
- 上一节:[切片重组](07.4.md)
|
|
|
-- 下一节:[字符串、数组和切片的应用](07.6.md)
|
|
|
+- 下一节:[字符串、数组和切片的应用](07.6.md)
|