小编lam*_*bda的帖子

Golang追加()什么时候创建一个新切片?

根据内置的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)

是此代码的操场链接.在输出中: …

go slice

7
推荐指数
2
解决办法
2218
查看次数

标签 统计

go ×1

slice ×1