Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go &引用;声明和未使用;错误_Go - Fatal编程技术网

Go &引用;声明和未使用;错误

Go &引用;声明和未使用;错误,go,Go,我得到一个错误,说我没有使用变量…但在我的noob看来,我是: func Sqrt(x float64) float64 { z := float64(x); for i := 0; i < 10; i++ { z := z - (z*z - x) / (2 * z); } return z; } func Sqrt(x float64)float64{ z:=64(x); 对于i:=0;i

我得到一个错误,说我没有使用变量…但在我的noob看来,我是:

func Sqrt(x float64) float64 {

    z := float64(x);

    for i := 0; i < 10; i++ {
        z := z - (z*z - x) / (2 * z);
    }

    return z;
}
func Sqrt(x float64)float64{
z:=64(x);
对于i:=0;i<10;i++{
z:=z-(z*z-x)/(2*z);
}
返回z;
}

有人能指出我在语言方面遗漏了什么吗?我认为这与
=
:=
和作用域有关,但我不确定。

for循环中的
:=
声明了一个新变量
z
,该变量将外部
z
隐藏起来。将其转换为普通的
=
以解决问题

func Sqrt(x float64) float64 {

    z := x

    for i := 0; i < 10; i++ {
        z = z - (z*z - x) / (2 * z);
    }

    return z;
}
func Sqrt(x float64)float64{
z:=x
对于i:=0;i<10;i++{
z=z-(z*z-x)/(2*z);
}
返回z;
}
顺便说一下,为了达到同样的精度和更高的速度,您可以尝试以下实现,它同时执行两个步骤:

func Sqrt(x float64) float64 {
    z := x
    for i := 0; i < 5; i++ {
        a := z + x/z
        z = a/4 + x/a
    }
    return z
 }
func Sqrt(x float64)float64{
z:=x
对于i:=0;i<5;i++{
a:=z+x/z
z=a/4+x/a
}
返回z
}

下面是查看函数的另一种方法

func Sqrt(x float64) (z float64) {
    z = x
    for i := 0; i < 10; i++ {
        z = z - (z*z - x)/(2*z);
    }
    return
}
func Sqrt(x浮点64)(z浮点64){
z=x
对于i:=0;i<10;i++{
z=z-(z*z-x)/(2*z);
}
返回
}

一般来说,
=
:=
之间有什么区别?
=
为现有变量赋值,而
:=
声明一个新变量并为其赋值。如果你认识C(或朋友),这有点像
foo=42
vs
int-foo=42
@dubeegee a=b意味着“让a拥有b的值”。a:=b表示“声明类型和值为b的变量a”。@dubeegee:
=
<代码>:=。