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

仅当条件为真时,如何在go中创建变量?

鲁彬炳
2023-03-14
问题内容

如果我在if块内创建变量,则以后将无法使用它。如果我在if块之前创建一个变量,而if块的计算结果为false,则会出现“变量已创建且未使用”的错误。

我敢肯定,这是设计使然,我正在尝试做我不应该做的事情,但是我想做的事情背后的逻辑对我来说很有意义。如果url中有页面信息,我以后想在sql语句中使用它,但是如果url中没有页面信息,则不需要这些变量。

http://pastebin.com/QqwpdM1d

编辑:这是代码:

var pageID string
var offset int
if len(r.URL.Path) > len("/page/") {
    pageID := r.URL.Path[len("/page/"):]
    offset, err := strconv.Atoi(pageID)
    if err != nil {
        log.Fatal(err)
    }
}
conn := "..."
db, err := sql.Open("mysql", conn)
defer db.Close()
if err != nil {
    log.Fatal(err)
}
var rows *sql.Rows
if offset != 0 {
    // ...
}

问题答案:

如果您在if语句之前声明一个变量并在if块中使用它,则条件求值并不重要,这不是编译时错误。

这种情况下的错误是您没有在if块内使用声明的变量。您的代码:

var pageID string
var offset int
if len(r.URL.Path) > len("/page/") {
    pageID := r.URL.Path[len("/page/"):]
    offset, err := strconv.Atoi(pageID)
    if err != nil {
        log.Fatal(err)
    }
}

在内部,if您没有分配给先前声明的pageID,而是使用了简短的变量声明
:=,该声明创建了一个新变量,遮盖了在外部块中创建的变量,并且该变量仅在if块的末尾有效(其作用域在最里面的包含块的末尾)。

解决方案是(您最可能想要的)简单地使用赋值=(将值赋给现有变量):

    pageID = r.URL.Path[len("/page/"):]

为了使其理解,请参见以下示例

i := 1
fmt.Println("Outer:", i)
{
    i := 2 // Short var decl: creates a new i, shadowing the outer
    fmt.Println("Inner:", i)
}
fmt.Println("Outer again:", i)

输出(在Go Playground上尝试):

Outer: 1
Inner: 2
Outer again: 1


 类似资料:
  • 我想为创建If condition,当评论的值如下时,我为变量Comment创建If Conditional 因为我在一个布局中有不同的设计和不同的功能,如果我创建*ex2Layout,它不是高效的*我想 但我有错误: 问题就在这里: 谁能建议我?

  • 问题内容: 我正在使用以下查询: 但是,我也想将其作为条件,因此它将执行以下操作: 如果 不到20分钟前()。 正确: 更新,添加一个,然后更新。 False: 所有字段均应保持相同。 我不太确定该怎么做,但是环顾四周之后,我尝试在零件中使用“声明” 。 但是我收到以下错误: 问题答案: 您使用的IF语句不正确 因此,IF检查条件并返回作为其参数提供的两个值之一。参见MySQL的流控制运算符。

  • null 当应用程序正在消费消息时,但随后consumeEnabled变成false的情况就没有必要考虑了。 请定义用Spring Kafka和\或Kafka Java客户机实现决策的最佳方式

  • 下面是网页的HTML代码。 而且 我正在执行一个基于这样一个条件的程序:如果某个文本被显示,那么我必须点击动态按钮。如果下列条件为真 driver.findElements(by.xpath(“//div[starts-with(@id,'qwer')]//a[contains(text(),'holiday')]”); 然后我会点击页面上的所有按钮 下面是这方面的程序。运行此程序后,它将执行el

  • 问题内容: 我需要有关为嵌套对象创建hibernate条件的帮助。例如 : 现在,我正在尝试从服务类(officeService)中提取与某个区域匹配的所有办事处,如下所示: 总是出现异常:“ org.hibernate.QueryException:无法解析属性:”我需要找出正确的方法来创建此查询的条件。有人可以帮忙吗? 问题答案: 请参阅用户指南的 “ 标准”部分下的“查询关联” :

  • 我想在多个data.tables(或data.frames)中执行相同的操作。例如,我想在所有data.tables中的相同规则上创建相同的变量条件。 列表.df 我的(坏的)试探性的: 很明显,不能像我现在所做的那样创建这个新变量,因为我会收到一条错误消息“Object not found”。有没有关于如何修复我的坏代码的线索?我有一种感觉可以帮助我,但我不知道如何帮助我。