为什么io.WriterString上出现运行时错误?
当运行以下代码时,我得到一个“panic:runtime error:invalid memory address或nil pointer dereference”。我不明白为什么,而且似乎无法从io.WriteString(w,s)中捕捉到错误,我认为这是问题所在。谁能给我指出正确的方向吗为什么io.WriterString上出现运行时错误?,io,go,Io,Go,当运行以下代码时,我得到一个“panic:runtime error:invalid memory address或nil pointer dereference”。我不明白为什么,而且似乎无法从io.WriteString(w,s)中捕捉到错误,我认为这是问题所在。谁能给我指出正确的方向吗 package main import( "io" "fmt" ) func main() { s := "hei" var w io.Writer _, err
package main
import(
"io"
"fmt"
)
func main() {
s := "hei"
var w io.Writer
_, err := io.WriteString(w, s)
if err != nil{
fmt.Println(s)
}
}
如果你加上
fmt.Println(w)
就在var w io.Writer
之后,您将看到打印的是
。这意味着您只是创建一个变量,而不是将其初始化为实际值。然后尝试将其传递给需要实io.Writer
对象但得到nil的函数
另外,io.Writer
是一个接口(请参阅),因此您需要找到它的具体实现(例如os.Stdout
)来实例化它
有关io
软件包的更多信息,请参阅
<强> P.S.< /强>也许你把这个与C++混淆了;在C++中,当你做了代码> IO::作者W< /Cuff>,然后C++代码> W/COD>自动初始化为<代码> IO::作者< /COD>,但是,GO代码<代码> var WIO。很明显,在这种情况下,
w
将包含null
或者更可能是一些不确定的垃圾。(Go保证它是null
)
将w
初始化为nil
写入程序。你需要把它指向一个真正的作者来做任何有用的事情,例如
w = os.Stdout
w = os.Stdout