From 6bc1295d23ac4ff7287bac402c9623a02b15b6d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=A0=E9=97=BB?= Date: Fri, 21 Nov 2014 07:24:57 -0500 Subject: [PATCH] Update 07.5.md --- eBook/07.5.md | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/eBook/07.5.md b/eBook/07.5.md index c295433..d72e442 100644 --- a/eBook/07.5.md +++ b/eBook/07.5.md @@ -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) \ No newline at end of file +- 下一节:[字符串、数组和切片的应用](07.6.md)