Go语言 if语句中的变量作用域

jutyujz0  于 2023-06-27  发布在  Go
关注(0)|答案(2)|浏览(139)

我今天刚开始学习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)

我唯一能想到的就是做一些像

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) {
...

老实说,如果这真的是解决方案,那么我不认为我想使用Golang毕竟。
那么,解决这个问题的最佳方法是什么呢?

juud5qan

juud5qan1#

您可以在if块之前声明new1,并在内部使用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)
yv5phkfx

yv5phkfx2#

与变量作用域的问题稍微相关,新的地鼠(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

相关问题