gpt4 book ai didi

Golang : panic: runtime error: invalid memory address or nil pointer dereference using bufio. 扫描器

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

我正在实现一个使用 bufio.Scanner 和 bufio.Writer 的 go 程序,我已经将我的代码打包如下

package main

import (
"fmt"
"player/command"
"strings"
)

func main() {
//Enter your code here. Read input from STDIN. Print output to STDOUT



for commands.Scanner.Scan() {

//scan a new line and send it to comand variable to check command exist or not
input := strings.Split(strings.Trim(commands.Scanner.Text(), " "), " ")
command := input[0]

if command == "" {
fmt.Printf("$ %s:", commands.Pwd)
continue
}

if !commands.Commands[command] {
commands.ThrowError("CANNOT RECOGNIZE INPUT.")

} else {

commands.Execute(command, input[1:], nil)

}
fmt.Printf("$ %s:", commands.Pwd)
}
}

我也在主包中使用 init.go 文件,如下所示

package main

import (
"flag"
"player/source"
)

func init() {
sourceFlag := flag.String("filename", "", "if input is through source file")
flag.Parse()
if *sourceFlag != "" {
source.Input(*sourceFlag)
}
}

我的最终包播放器/源如下:-

package source

import (
"bufio"
"log"
"os"
"player/command"
)

func Input(source string) {
if source != "" {
readFile, err := os.OpenFile(source, os.O_RDONLY, os.ModeExclusive)
if err != nil {
log.Fatal(err)
}
commands.Scanner = bufio.NewScanner(readFile)
writeFile, err := os.Create(source + "_output.txt")
if err != nil {
log.Fatal(err)
}
commands.Writer = bufio.NewWriter(writeFile)
} else {
commands.Scanner = bufio.NewScanner(os.Stdin)
commands.Writer = bufio.NewWriter(os.Stdout)
// fmt.Println(commands.Scanner)
}
}

执行这段代码的结果是

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x58 pc=0x4a253a]

goroutine 1 [running]:
bufio.(*Scanner).Scan(0x0, 0x5)
/usr/local/go/src/bufio/scan.go:120 +0x2a
main.main()
/home/xyz/dev/go/src/players/main.go:13 +0x124

即使在初始化扫描仪之后我也不知道为什么我无法读取它

最佳答案

command.Scanner 未初始化的一个原因可能是您没有将 filename 参数传递给主脚本。在这种情况下,根据 if 条件,永远不会调用 source.Input(*sourceFlag)(if *sourceFlag != "" 在缺少 文件名选项)。

此外,由于稍后在 source 中检查空文件名,因此 maininit 中的这个条件是多余的。尝试:

func init() {
sourceFlag := flag.String("filename", "", "if input is through source file")
flag.Parse()
source.Input(*sourceFlag)
}

关于Golang : panic: runtime error: invalid memory address or nil pointer dereference using bufio. 扫描器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38807855/

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