Variable not declared, inside a if..else statement

global-variables, go

Solution

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)
    }
}

Problem

I'm just started learning go lang, and I am confused about declaring variables in go lang for example I've declare `req`, `er` inside if...else statement. ``` 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) } } ``` But I've got error from terminal ``` ./goreq.go:127: req declared and not used ./goreq.go:127: er declared and not used ./goreq.go:129: req declared and not used ./goreq.go:129: er declared and not used ``` seems like anything I declared inside If statement is not working... How can I solved it?

Original source