运行以下代码时出现"恐慌:运行时错误:无效的内存地址或无指针取消引用".我不明白为什么,似乎无法从我相信问题所在的io.WriteString(w,s)中捕获错误.任何人都能指出我正确的方向吗?
package main
import(
"io"
"fmt"
)
func main() {
s := "hei"
var w io.Writer
_, err := io.WriteString(w, s)
if err != nil{
fmt.Println(s)
}
}
Run Code Online (Sandbox Code Playgroud)
如果你添加
fmt.Println(w)
Run Code Online (Sandbox Code Playgroud)
之后var w io.Writer,你会看到印刷的是<nil>.这意味着您只是创建一个变量,而不是将其初始化为实际值.然后,您尝试将其传递给需要真实io.Writer对象的函数,但得到的值为零.
另外,io.Writer是一个接口(请参阅http://golang.org/pkg/io/#Writer),因此您需要找到它的具体实现(例如os.Stdout)才能实例化它.
有关该io软件包的更多信息,请参阅http://golang.org/pkg/io/.
PS也许你会把它与C++混淆; 在C++中,当你这样做时io::Writer w,会w自动初始化以包含一个新的副本io::Writer,但是,Go代码var w io.Writer实际上与io::Writer* wC++相同,很明显,w在这种情况下,它将包含null或更多可能是一些不确定的垃圾.(去保证它是null).
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |