我刚刚开始学习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。
那么解决这个问题的最佳方法是什么?
答案 0 :(得分:13)
您可以在new1
阻止之前声明if
并在内部使用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)
答案 1 :(得分:1)
与变量范围问题稍有关系,新的gopher(程序员)可能会发现有趣的是,您还可以在代码中的任意位置用一对大括号{}任意强制变量范围。您不需要关键字。
示例:
// 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