Variable not declared, inside a if..else statement
Because variables are only defined in the scope in which they are declared:
package main
import "fmt"
func main() {
a := 1
fmt.Println(a)
{
a := 2
fmt.Println(a)
}
fmt.Println(a)
}
go play
The difference between =
and :=
is that =
is just assignment and :=
is syntax for variable declaration and assigment
This:
a := 1
is equivalent to:
var a int
a = 1
What you probably want is:
var req *http.Request
var er error
if strings.EqualFold(r.Method, "GET") || strings.EqualFold(r.Method, "") {
req, er = http.NewRequest(r.Method, r.Uri, b)
} else {
req, er = http.NewRequest(r.Method, r.Uri, b)
}
if er != nil {
// we couldn't parse the URL.
return nil, &Error{Err: er}
}
// add headers to the request
req.Host = r.Host
req.Header.Add("User-Agent", r.UserAgent)
req.Header.Add("Content-Type", r.ContentType)
req.Header.Add("Accept", r.Accept)
if r.headers != nil {
for _, header := range r.headers {
req.Header.Add(header.name, header.value)
}
}
This is because you have declared the variables req
and er
inside the if else
condition and are trying to use it outside the scope (the scope is just the if
and else
inside which they are declared).
You need to declare er
and req
outside the if else