【问题标题】:behave like a "cat" linux command using io/ioutil表现得像使用 io/ioutil 的“cat”linux 命令
【发布时间】:2020-04-20 07:27:49
【问题描述】:

有一个任务是创建一个 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 包和其中一个学校包来打印输出。 在互联网上找到了这个,但它只是将所有输入保存在 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)
        }
    }
}

【问题讨论】:

  • 向我们展示尝试实现cat的内容。它有效吗?如果没有,什么不起作用?
  • "它只是将所有输入保存在数据中,然后在我按 ctrl+C 后将其打印回来。"这就是cat 从您输入的 STDIN 中读取的内容。你有什么期待?
  • 当您在命令行中仅键入 cat 时,它会立即打印回您键入的任何内容。您首先编写的函数会读取并保存我输入的所有内容,并且只有在 ctrl+C 之后才会全部打印出来。
  • 对于从 os.Stdin 复制(提示,提示),您不需要 ioutil 包。另外,我非常怀疑您不允许使用内置函数(您也没有获得使用 ==++ 运算符的明确许可)。
  • 好吧,我一个月前才开始编码,我不知道所有这些,但我可以使用 ++ == 等,不能使用 len、make、append 和 mb smthing else跨度>

标签: go input io


【解决方案1】:

要检查参数的数量,请使用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.
}

【讨论】:

  • 我不能使用 len,但我知道。我只尝试了我写的。
  • len 不是一个包,它是一个built-in function
  • 好的,我仍然不能在我的任务中使用它。并且您的 func 给出相同的结果
  • 你用哪个built-in function可以
  • 我只能使用 ioutil、io、os 和 cast
【解决方案2】:

嗯,我找到了,它可以工作

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2020-07-25
    • 2023-02-06
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多