Golang内置函数之copy用法及用例
func Join(a []string, sep string) string {
switch len(a) {
case 0:
return ""
case 1:
return a[0]
case 2:
// Special case for common small values.
// Remove if golang.org/issue/6714 is fixed
return a[0] + sep + a[1]
case 3:
// Special case for common small values.
// Remove if golang.org/issue/6714 is fixed
return a[0] + sep + a[1] + sep + a[2]
}
// 计算拼接后的字符串长度
n := len(sep) * (len(a) - 1) // 分隔符的总长度(需要多少个分隔符就把它们的长度都加起来)
for i := 0; i < len(a); i++ { // 然后n加上各个字符串加起来的长度
n += len(a[i])
}
b := make([]byte, n)
bp := copy(b, a[0])
// 将字符串当成[]byte类型的slice, 并添加进去
// copy会返回两个参数中长度较短的那个参数的长度
// 循环遍历剩余的字符串, 并把字符串添加进b([]byte)中
for _, s := range a[1:] {
// 以返回的长度为下标并在这个slice后面添加分隔符(sep), 并把bp当前长度记住
bp += copy(b[bp:], sep)
// 以返回的长度为下标并在这个slice后面添加字符串(s), 并把bp当前长度记住
bp += copy(b[bp:], s)
}
return string(b)
}