
在 go 中,可通过 `append(slice, otherslice...)` 语法将一个二维切片(如 `[][]string`)整体追加到另一个同类型二维切片末尾,其中 `...` 将目标切片展开为可变参数。
Go 的 append() 函数原生只接受一维切片(即 []T 类型)作为参数,因此直接传入 [][]string 会导致编译错误:cannot use myArray (type [][]string) as type []string in append。解决的关键在于理解 ... 操作符的作用——它会将切片的每个元素作为独立参数传递给函数,从而匹配 append([][]string, [][]string...) 的签名。
以下是一个完整示例:
package main
import "fmt"
func main() {
a := [][]string{{"a", "b"}, {"c", "d"}}
b := [][]string{{"1", "2"}, {"3", "4"}}
// ✅ 正确:使用 ... 展开 b,逐个追加其子切片
a = append(a, b...)
fmt.Println(a)
// 输出: [[a b] [c d] [1 2] [3 4]]
}⚠️ 注意事项:
- b... 要求 b 的元素类型必须与 a 的元素类型一致(此处均为 []string),否则编译失败;
- append() 返回新切片,必须显式赋值回原变量(如 a = append(a, b...)),否则修改不会生效;
- 该操作是浅拷贝:子切片(如 b[0])的底层数组未被复制,若后续修改 b[0][0],而 a 中对应位置引用同一底层数组,则可能产生意外副作用(需根据场景决定是否深拷贝);
- 若需拼接多个二维切片,可链式调用:a = append(append(a, b...), c...)。
总结:append(dst, src...) 是 Go 中拼接多维切片最简洁、最惯用的方式,核心在于正确使用 ... 操作符进行参数展开。掌握这一模式,可高效处理切片合并、构建动态二维数据结构等常见任务。









