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?
Java allows you to declare variables within the body of a while or if statement, but it's important to remember the following: A variable is available only from its declaration down to the end of the braces in which it is declared.
Yes, you can assign the value of variable inside if. I wouldn't recommend it. The problem is, it looks like a common error where you try to compare values, but use a single = instead of == or === . @EddieB This isn't like shooting yourself in the foot.
No. That is not allowed in C. According to the ANSI C Grammar, the grammar for the if statement is IF '(' expression ')' statement . expression cannot resolve to declaration , so there is no way to put a declaration in an if statement like in your example.
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)     } } 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With