gpt4 book ai didi

go - 输入正确但在 golang 中输出 panic

转载 作者:IT王子 更新时间:2023-10-29 02:27:36 26 4
gpt4 key购买 nike

尝试编写一些 go,我想在 Golang 中创建一种 cat 函数:

package main

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

func main() {
// part to ask the question and get the input
fmt.Print("Which file would you like to read?: ")
var input string
fmt.Scanln(&input)
fmt.Print(input)

// part to give the output
f, err := os.Open(os.Args[1]) // Open the file
if err != nil {
log.Fatalln("my program broken")
}

defer f.Close() // Always close things open

bs, err := ioutil.ReadAll(f)
if err != nil {
log.Fatalln("my program broken")
}

// part to print the output
fmt.Printf("input", bs) // %s convert directly in string the result

}

但我对执行感到 panic ,没有找到更明确的信息。

我做错了什么?

如何从终端获取有关该错误的更多信息?

$ go run gocat.go Which file would you like to read?: gocat.go gocat.gopanic: runtime error: index out of range

goroutine 1 [running]: panic(0x4b1840, 0xc42000a0e0) /usr/lib/go/src/runtime/panic.go:500 +0x1a1 main.main() /home/user/git/go-experimentations/gocat/gocat.go:23 +0x4ba exit status 2

最佳答案

我想你在网上找到了一些例子,但不太明白发生了什么。

来自os包的文档。

Args hold the command-line arguments, starting with the program name.

由于您在没有任何参数的情况下启动了您的程序,并且 os.Args 是一个 slice ,因此当您访问超出 slice 范围时程序会出现困惑。 (就像试图访问任何不存在的数组的元素一样)

看起来你是想在这里提示输入

var input string
fmt.Scanln(&input)
fmt.Print(input)

你需要做的就是替换

f, err := os.Open(os.Args[1])

与:

f, err := os.Open(input)

您最后的打印语句也不正确。

应该是:

// part to print the output
fmt.Printf("input \n %s", string(bs))

您需要将当前为 []bytebs 转换为 string 并且您需要添加 %s 指示 fmt.Printf string(bs) 应该放在格式字符串中

关于go - 输入正确但在 golang 中输出 panic ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41347423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com