- 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 条
- 全部回答
-
回不去的曾经 普通会员 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)创建了一个读取标准输入流的通道。然后,我们在读取数据之前先打开了这个通道,这样就可以正确地从标准输入读取数据了。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
