无法在 golang 中使用“\n”正确拆分字符串

我试图将free命令的输出分成 3 行。free 的一般输出是

total        used        free      shared  buff/cache   available Mem:       16309236    11129884      860300      534300     4319052     4306208 Swap:      20971516      234236    20737280

但是当我使用 strings.Split() 时,golangSplit函数的行为现在符合预期。我尝试调试它但找不到任何东西。

请帮忙。

package main


import "os/exec"

import "github.com/golang/glog"

import "fmt"

import "strings"

import "errors"


func thisWorks() {

    str_out := "hello world \n How are you \nthis is good"

    lines := strings.Split(str_out, "\n")

    fmt.Printf("lines is  \n%s\n", lines)

}


func GetFreeOutput() error {


    var errMsg string

    bytes_out, err := exec.Command("free").Output()


    // This shows that the output has 10 (newline) in it.

    fmt.Println(bytes_out)


    if err != nil {

        errMsg = "Error geting output of free command"

        glog.Fatal(errMsg)

        return errors.New(errMsg)

    }


    str_out := string(bytes_out)

    fmt.Printf("str_out is  \n%s", str_out)


    // This is not splitting the lines, it is converting the whole output to a single line.

    fmt.Println("\nLines are ", strings.Split(str_out, "\n"))


    index_of_newline := strings.Index(str_out, "\n")


    // This gives the index of "\n" as 79 on my machine, which is correct.

    fmt.Printf("\nIndex is %d", index_of_newline)


    fmt.Println("\nLine using index are ", strings.Split(str_out, string(str_out[index_of_newline])))


    return nil

}


func main() {

    err := GetFreeOutput()

    fmt.Printf("Error is %s", err)

}


小怪兽爱吃肉
浏览 119回答 1
1回答

慕娘9325324

Split 正在按预期工作。问题在于如何打印线条。下面 Println 的第二个参数是一个切片。 // This is not splitting the lines, it is converting the whole output to a single line.fmt.Println("\nLines are ", strings.Split(str_out, "\n"))根据fmt文档,切片打印为:[elem0 elem1 ...]请注意,元素由空格分隔。按 \n 拆分并打印实际上会将 \n 替换为 ' '。尝试此代码以确认拆分是否按预期工作:for i, line := range strings.Split(str_out, "\n") {   fmt.Println(i, line)}
打开App,查看更多内容
随时随地看视频慕课网APP