使用io / ioutil就像“ cat” linux命令一样

时间:2020-04-20 07:27:49

标签: go input io

有一个创建go文件的任务,该任务的行为类似于cat命令。我有一些想法,但如果不写文件名,我不知道如何读取输入。

student@ubuntu:~/div-01/cat$ go build cat.go
student@ubuntu:~/div-01/cat$ ./cat
Hello
Hello
^C
student@ubuntu:~/div-01/cat$

我也只能使用 ioutil,io,os 程序包和其中一种学校程序包来打印输出。 在Internet上发现了这一点,但是它只是将所有输入保存在 data 中,然后,当我按ctrl + C组合键时,会将其打印回去。

package main

import (
    "fmt"
    "io/ioutil"
    "os"
)

func main() {
    var lenght int
    args := os.Args[1:]
    for i := range args {
        lenght++
        i++
    }
    if lenght == 0 {
        data, err := ioutil.ReadAll(os.Stdin)
        if err == nil {
            fmt.Println(data)
        }
    }
}

2 个答案:

答案 0 :(得分:0)

要检查参数数量,请使用len

package main

import (
    "fmt"
    "io/ioutil"
    "os"
)

func main() {
    // No arguments give, read from STDIN.
    if len(os.Args) == 1 {
        data, err := ioutil.ReadAll(os.Stdin)
        if err != nil {
            os.Exit(1)
        }
        fmt.Printf("%s", data)
        os.Exit(0)
    }

    // TODO Read the content of all files.
}

答案 1 :(得分:0)

好吧,我发现了它并且有效

if len(os.Args) == 1 {
    _, err := io.Copy(os.Stdout, os.Stdin)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println("^C")
}