【问题标题】:Golang error "invalid memory address or nil pointer dereference", Why this happens? [duplicate]Golang 错误“无效的内存地址或 nil 指针取消引用”,为什么会发生这种情况? [复制]
【发布时间】:2018-07-19 18:41:56
【问题描述】:
package main

import (
        "fmt"
        "net/http"
)

func main() {
        http.HandleFunc("/", handler)
        http.HandleFunc("/cookie", cookie)
        http.ListenAndServe(":8080", nil)
}

func handler(w http.ResponseWriter, r *http.Request) {
            // do ...
}

func cookie(w http.ResponseWriter, r *http.Request) {
        cd, _ := r.Cookie("hello")

        if cd.Value == "username" {
               // do ...
        }
}

如果运行:

$ 运行 main.go

服务器正常工作没有问题,但在 firfox 中插入“/cookie”路径时出现问题。

错误:

运行时错误:无效的内存地址或 nil 指针取消引用

【问题讨论】:

    标签: go


    【解决方案1】:

    正如错误消息所说,当您尝试取消引用(使用)nil 时,会发生这种情况。在不知道错误报告在哪一行的情况下,我不得不猜测它在这里:

        cd, _ := r.Cookie("hello")
    
        if cd.Value == "username" {  // <-- This line
               // do ...
        }
    

    因为您从r.Cookie() 丢弃错误而不是检查错误,所以您不知道cookie hello 不存在,这意味着cdnil。因此,当您尝试使用 cd.Value 时,您将取消对 nil 指针的引用,从而导致您看到的恐慌。

    【讨论】:

      猜你喜欢
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 2013-09-16
      • 2015-10-06
      • 2022-01-05
      • 2017-02-07
      • 2020-04-17
      相关资源
      最近更新 更多