当前位置: 首页 > 面试题库 >

在if..else语句中未声明变量

葛雨华
2023-03-14
问题内容

我刚刚开始学习go lang,而对于在go lang中声明变量感到困惑

例如我已经声明reqer里面if … else语句。

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

但是终端出现错误

./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

好像我在If语句中声明的任何内容都不起作用…我该如何解决?


问题答案:

因为变量仅在声明它们的范围内定义:

package main

import "fmt"

func main() {
    a := 1
    fmt.Println(a)
    {
        a := 2
        fmt.Println(a)
    }
    fmt.Println(a)
}

去玩

之间的区别=,并:==仅仅是分配和:=对变量的声明和分配新建分配FY语法

这个:

a := 1

等效于:

var a int
a = 1

您可能想要的是:

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


 类似资料:
  • 问题内容: 函数声明如何处理? 此示例在Chrome和Firefox中产生不同的输出。Chrome输出,而FF输出。 问题答案: 当问这个问题时,ECMAScript5(ES5)盛行。在ES5的严格模式下,函数声明不能​​嵌套在一个块中,如问题所示。在非严格模式下,结果是不可预测的。不同的浏览器和引擎针对如何处理块内的函数声明实现了自己的规则。 许多浏览器都支持ECMAScript2015(ES2

  • if语句后面可以跟一个else if...else语句,这对于使用单个if ... else if语句测试各种条件非常有用。 当使用if, else if, else语句时,要记住几点。 一个if可以有零个或一个else的,它必须在任何其他if之后。 一个if可以有零到多个else if是,他们必须在其他之前。 一旦else if成功, else if任何其他else if else不会被测试。

  • if语句构造可以有一个或多个可选的else-if构造。 当if条件失败时,紧接着执行else-if 。 当else-if也失败时,执行其后继else-if语句(如果有的话),依此类推。 可选的else放在最后,当上述任何条件都不成立时执行。 所有其他语句(else-if和else)都是可选的。 else-if可以使用一次或多次。 else必须始终放在构造的末尾,并且只能出现一次。 语法 (Synt

  • if后面可以跟一个可选的else块。 如果if测试的布尔表达式求值为false,则执行else块。 以下是语法。 if(boolean_expression) { // statement(s) will execute if the Boolean expression is true } else { // statement(s) will execute if th

  • if后面可以跟一个可选的else块。 if块测试的布尔表达式求值为false, if执行else块。 以下是语法。 if(boolean_expression){ // statement(s) will execute if the Boolean expression is true. } else { // statement(s) will execute if the

  • 我们将看到的下一个决策声明是if/else语句。 本声明的一般形式是 - if(condition) { statement #1 statement #2 ... } else{ statement #3 statement #4 } 该陈述的一般工作是首先在if语句中评估条件。 如果条件为真,则它然后执行语句并在else条件之前停止并退出循环。