Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to golang check a variable is nil

Tags:

go

my code is like this, when I use req, _ := http.NewRequest("GET", "http://www.github.com", content), it will emit exception:

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0xffffffff addr=0x0 pc=0xaab78]

goroutine 1 [running]:
net/http.NewRequest(0x34f3b8, 0x3, 0x378020, 0x15, 0xfeec4350, 0x0, 0x10738801, 0x0, 0x0, 0x107000e0)
    /usr/local/go/src/net/http/request.go:570 +0x498
main.main()
    /tmp/sandbox056954284/main.go:17 +0xe0

but when I use req, _ := http.NewRequest("GET", "http://www.github.com", nil), it works, why? how I set the third argument value

package main

import (
    "bytes"
    "net/http"
)


func main() {
    client := &http.Client{}
    var content *bytes.Reader
    content = nil
    req, _ := http.NewRequest("GET", "http://www.github.com", content)
    resp, _ := client.Do(req)
    defer resp.Body.Close()
}
like image 770
sundq Avatar asked Oct 30 '15 00:10

sundq


1 Answers

A go interface consists of a type and a value. An interface is only nil if both the type and the value are nil. You provided a type but no value: Therefore NewRequest tried to call Read on a nil struct (the value of the interface).

like image 104
0x434D53 Avatar answered Nov 07 '22 17:11

0x434D53