账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于Go语言无法重定向标准输入流问题
    16
    0

    在学习Go语言的时候,发现只能重定向标准输入和标准错误流,没法重复标准输入流,不知道是代码问题,还是Go本身问题(猜测),代码如下:

    package main
    
    import (
        "fmt"
        "os"
        "syscall"
    )
    
    func main() {
    
        var (
            firstName, lastName string;
        )
    
        fmt.Println("Go Process START")
    
        ioRedirect("/Path/To/File/stdin.dat")
    
        fmt.Scanln(&firstName, &lastName)
    
        fmt.Println(firstName + " " + lastName)
    
        fmt.Println("Go Process END")
    }
    
    func ioRedirect(file string) {
        f, e := os.OpenFile(file, os.O_WRONLY|os.O_CREATE|os.O_SYNC, 0755)
        if e == nil {
            fd := f.Fd()
            syscall.Dup2(int(fd), int(os.Stdin.Fd()))
        }
    
        if e != nil {
            fmt.Println(e.Error());
        }
    }

    不知道有没有朋友遇到相同的问题。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 回不去的曾经 普通会员 1楼

      在Go语言中,如果试图从标准输入读取数据,但是没有使用标准输入流来接收数据,那么在读取过程中就可能会出现无法重定向标准输入流的问题。

      例如,以下代码会导致程序无法正常运行:

      ```go package main

      import ( "fmt" "os" "bufio" )

      func main() { reader := bufio.NewReader(os.Stdin) fmt.Print("请输入第一个数:") num1, _ := reader.ReadString('\n') fmt.Println("第二个数:", num1) } ```

      在这个例子中,os.Stdin是一个读取标准输入流的通道。如果我们在程序运行过程中试图通过这个通道读取数据,那么就会导致无法重定向标准输入流的问题。

      要解决这个问题,我们可以在读取数据之前先将标准输入流打开:

      ```go package main

      import ( "fmt" "os" "bufio" )

      func main() { reader := bufio.NewReader(os.Stdin) fmt.Print("请输入第一个数:") num1, _ := reader.ReadString('\n') fmt.Println("第二个数:", num1) } ```

      在这个例子中,我们使用bufio.NewReader(os.Stdin)创建了一个读取标准输入流的通道。然后,我们在读取数据之前先打开了这个通道,这样就可以正确地从标准输入读取数据了。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部