我下面的目标是返回一片 slice ,以便稍后在主函数中对其进行迭代。

当前的行为是,当我在fmt.PrintLn(test)上打印时,“test”变量将显示 slice 中的每一行,但在fmt.PrintLn(showParsed)上打印时,“parsed”变量将为空。我该如何解决?

func lsCommand(outString string) []string {
    scanner := bufio.NewScanner(strings.NewReader(outString))
    var parsed []string
    for scanner.Scan() {
        s := scanner.Text()
        ss := strings.Fields(s)
        test := append(parsed, ss...)
        fmt.Println(test)
    }
    return parsed
}

func main() {
    ctx := context.Background()
    ok, outString, errString := runBashCommandAndKillIfTooSlow(ctx, "ls", 2000*time.Millisecond)
    if ok != true {
        panic(errString)
    }

    showParsed := lsCommand(outString)
    fmt.Println(showParsed)
}

最佳答案

append isn't guaranteed修改传递给它的 slice ,因此parsed不变。仅test包含ss的元素。在每次迭代中使用返回值:

var parsed []string
for scanner.Scan() {
    s := scanner.Text()
    ss := strings.Fields(s)
    parsed = append(parsed, ss...)
}
return parsed

关于go - 无法将 slice 附加到现有 slice ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56909038/

10-10 14:20