我今天刚开始学习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毕竟。
那么,解决这个问题的最佳方法是什么呢?
2条答案
按热度按时间juud5qan1#
您可以在
if
块之前声明new1
,并在内部使用make
:yv5phkfx2#
与变量作用域的问题稍微相关,新的地鼠(go程序员)可能会发现有趣的是,你也可以在代码的任何地方用一对花括号{ }强制变量作用域。你不需要一个关键字。
示例: