根据内置的api文档,当原始切片的容量不够大时,append()将重新分配并复制到新的数组块.
这是用于创建字母组合(在本例中为布尔值)的递归算法的(简化版本).将字母表的成员(true,false)递归地添加到切片中,直到它是正确的长度,此时它通过通道发送.
package main
import (
"fmt"
)
func AddOption(c chan []bool, combo []bool, length int) {
if length == 0 {
fmt.Println(combo, "!")
c <- combo
return
}
var newCombo []bool
for _, ch := range []bool{true, false} {
newCombo = append(combo, ch)
AddOption(c, newCombo, length-1)
}
}
func main() {
c := make(chan []bool)
go func(c chan []bool) {
defer close(c)
AddOption(c, []bool{}, 4)
}(c)
for combination := range c {
fmt.Println(combination)
}
}
Run Code Online (Sandbox Code Playgroud)
这是此代码的操场链接.在输出中: …