вести себя как команда "cat" linux, используя io / ioutil - PullRequest
0 голосов
/ 20 апреля 2020
У

есть задача создать файл 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 пакеты и один из школьных пакетов для печати продукции. В inte rnet нашел это, но он просто сохраняет весь ввод в 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 голосов
/ 21 апреля 2020

хорошо, я нашел это, и оно работает

if len(os.Args) == 1 {
    _, err := io.Copy(os.Stdout, os.Stdin)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println("^C")
}
0 голосов
/ 20 апреля 2020

Чтобы проверить количество аргументов, используйте 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.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...