【发布时间】:2021-01-26 04:14:54
【问题描述】:
这是我的围棋程序:
package main
import (
"bufio"
"flag"
. "fmt"
"os"
)
var (
testBool *bool
myName *string
)
func main() {
testBool = flag.Bool("testbool", false, "test bool flag")
flag.Parse()
Println(*testBool)
funcFlags()
}
func funcFlags() {
reader := bufio.NewReader(os.Stdin)
Print("Enter your name: ")
*myName, _ = reader.ReadString('\n')
Println(myName)
}
它的执行以 nil 指针取消引用错误结束,如下所示:
▶ go run main.go -testbool
true
Enter you name: John
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x10acc9e]
goroutine 1 [running]:
main.funcFlags()
/Users/pantelis/Desktop/cli_testing/main.go:25 +0x1de
main.main()
/Users/pantelis/Desktop/cli_testing/main.go:19 +0x13b
exit status 2
为什么要分配
*myName, _ = reader.ReadString('\n')
错误如上,而这个
testBool = flag.Bool("testbool", false, "test bool flag")
成功了。
两个变量(即testBool 和myName)的初始化方式相同。
【问题讨论】: