美文网首页
Go 语言中 := / = 的区别以及 for 循环关于 ra

Go 语言中 := / = 的区别以及 for 循环关于 ra

作者: 胆大的大鼎 | 来源:发表于2017-09-18 20:22 被阅读0次

在 go 语言中,= 是赋值, := 是声明变量并赋值。

“:=”只能用在函数体中。它的一个重要用途是用在“if”,“for”和“switch”语句的初始化,使变量成为一个“临时变量”,也就是变量的作用域仅限于这条语句。如下例所示:


package main

import "fmt"

func main() {

    for  j := 3; j <= 5; j++ {
        fmt.Println(j)
    }

    fmt.Println(j)
}

上述代码会造成编译错误,提示 undefined j。但如果在for前面加入对 j的声明:

package main

import "fmt"

func main() {
    //var j int = 1
    j := 1
    for  j := 3; j <= 5; j++ {
        fmt.Println(j)
    }
    fmt.Println(j)
}

无论是以 var j int =1还是j :=1声明,输出都是

3
4
5
1

之所以会注意到这个问题是在下面这个例子中,看到第二个循环中 a 的值是从0 开始的

func main() {

   var b int = 15
   var a int

   for a := 0; a < 10; a++ {
      fmt.Printf("a 的值为: %d\n", a)
   }

   for a < b {
      a++
      fmt.Printf("a 的值为: %d\n", a)
      }

所以总结下来便是, 在 for 循环中即使使用了:= 声明了一个与之前声明过的变量同名的变量,在 for 中声明的变量也只是个局部变量,不会影响 for 外面变量的值


在 go 的 for 循环中,有一种是以如下方式进行的,结合上面对:=讨论可知,下面的 value 只是对dataset 中元素的值的复制,不是元素本身

for key, value := range dataset {
}

具体可见下面这个例子

package main

import "fmt"

func main() {
    a := []string{}
    a = append(a, "hello")
    a = append(a, ", ")
    a = append(a, "world")
    fmt.Println(a)

    for i := 0; i < len(a); i++ {
        fmt.Println(&a[i])
    }
    fmt.Println("------------")
    for _, aa := range a {
        aa += "@"
        fmt.Println(&aa)
    }
    fmt.Println("------------")
    for i := 0; i < len(a); i++ {
        a[i] += "@"
        fmt.Println(&a[i])
    }
    fmt.Println("------------")
    fmt.Println(a)
}

输出为

[hello ,  world]
0xc042044080
0xc042044090
0xc0420440a0
------------
0xc04203c1f0
0xc04203c1f0
0xc04203c1f0
------------
0xc042044080
0xc042044090
0xc0420440a0
------------
[hello@ , @ world@]

相关文章

网友评论

      本文标题:Go 语言中 := / = 的区别以及 for 循环关于 ra

      本文链接:https://www.haomeiwen.com/subject/rqzbsxtx.html