if语句中的变量范围

Ala*_*air 12 go

我刚刚开始学习Go,并且已经陷入了变量范围.

我最终对如何解决这个事实感到困惑,即我无法在if语句中创建变量并在之后使用它.

这是我的代码.问题是new1不能在if语句之前创建,因为它的大小取决于if语句的结果,并且在if语句中创建它我在if语句结束后不能使用它.

if len(array1)>len(array2) {
    new1 := make([]string,0,len(array1))
    mc := Array2Map_string(array1)
    for _,tok :=range array2 {
        _, ok := mc[tok]
        if ok {
            new1[len(new1)]=tok
            }
        }
    } else {
    new1 := make([]string,0,len(array2))
    mc := Array2Map_string(array2)
    for _,tok :=range array1 {
        _, ok := mc[tok]
        if ok {
            new1[len(new1)]=tok
            }
        }
    }
new2 := make([]string,0,len(new1))
copy(new2, new1)
Run Code Online (Sandbox Code Playgroud)

我唯一能想到的就是做类似的事情

var pointlessvariable uint
if len(array1)>len(array2) {
pointlessvariable=len(array1)
} else {
pointlessvariable=len(array2)
}
var new1 = make([]string,0,pointlessvariable)
if len(array1)>len(array2) {
...
Run Code Online (Sandbox Code Playgroud)

说实话,如果这确实是解决方案,那么我认为我不想使用Golang.

那么解决这个问题的最佳方法是什么?

jul*_*enc 13

您可以new1if块之前声明并make在内部使用:

var new1 []string

if len(array1)>len(array2) {
    new1 = make([]string, 0, len(array1))
    // instructions ...
} else {
    new1 = make([]string, 0, len(array2))
    // other instructions ...
}

new2 := make([]string, 0, len(new1))
copy(new2, new1)
Run Code Online (Sandbox Code Playgroud)

  • 耸耸肩... golang总是发现使一切不必要的冗长 (3认同)

kin*_*roi 5

与变量作用域问题稍微相关的是,新的地鼠(go 程序员)可能会发现有趣的是,您还可以在代码中的任何位置使用一对大括号 { } 任意强制变量作用域。您不需要为此使用关键字。

例子:

// Outside of scope
var color = "blue"

{
    // Inside a new scope
    var color = "red"
    fmt.Println(color) // Prints red
}

// Outside of scope again
fmt.Println(color) // Prints blue again
Run Code Online (Sandbox Code Playgroud)