美文网首页
Tank技术【3-4】GoLang语法实战学习(2)

Tank技术【3-4】GoLang语法实战学习(2)

作者: idontknowctt | 来源:发表于2020-01-05 11:47 被阅读0次

三、数组和for循环

一维数组可以这样声明:var arrNumbers[5] int
或者用:=这样声明:

arrNumbers :=[5] float64{3.3, 4.5, 6.2, 6.3, 9.8}

for 循环的标准形式和c或者java略有不同,少掉了括号(), for循环也可以嵌套。示范程序如下:

package main
import "fmt"
func main(){
  for i:=1; i<=5; i++ {
    fmt.Println(i)
  }
  var arrNumbers[5] int
  arrValues := [5]float64{3.4, 5.4, 6.7, 8.9, 10.2}
  for i:=0; i<5; i++ {
    arrNumbers[i]=i*3-2
    fmt.Println(arrNumbers[i],"  ",arrValues[i])
  }
  var twoDArr[3][3] int
  for i:=0;i<3;i++{
    for j:=0;j<3;j++{
      twoDArr[i][j]=i*10+j
    }
  }
  fmt.Println(twoDArr)
}

执行结果如下

1
2
3
4
5
-2    3.4
1    5.4
4    6.7
7    8.9
10    10.2
[[0 1 2] [10 11 12] [20 21 22]]

可以看到Println可以直接打印二维数组。
嵌套for循环和其他语言是类似的。

四、用range的for循环

go语言提供的range功能可以方便的遍历数组。具体用户法如下面示范程序。

for  theIndex, v := range arrTheArray { 
    fmt.Println("theIndex= ", theIndex, " value= ",value, "arrTheArray[theIndex] =",arrTheArray[theIndex])
}

可以看出,第一个 theIndex 就是序号,第二个 v就是具体的值。这两个变量叫什么名字是没有关系的,只和放的顺序有关。第一个就是序号,第二个就是值。
可以对二维数组做range, 具体做法是一个维度一个维度的进行遍历,用双层for循环实现。如下面的程序。

for i, oneDArr := range twoDArr{
    for j, value := range oneDArr{
      fmt.Println(i,j, value)
    }
    fmt.Println("||")
  }

整个程序如下:

package main
import "fmt"
func main(){
  arrTheArray :=[5] float64 {1.2,3.4,5.6,7.6,8.2}
  for  theIndex, v := range arrTheArray {
    fmt.Println("theIndex= ", theIndex, " v= ",v, "arrTheArray[theIndex] =",arrTheArray[theIndex])
  }
  var twoDArr[3][3] int
  for i:=0;i<3;i++{
    for j:=0;j<3;j++{
      twoDArr[i][j]=i*10+j
    }
  }
  // fmt.Println(twoDArr)
  for i, oneDArr := range twoDArr{
    for j, value := range oneDArr{
      fmt.Println(i,j, value)
    }
    fmt.Println("||")
  }
}

运行结果如下:

theIndex= 0 v= 1.2 arrTheArray[theIndex] = 1.2
theIndex=  1  v=  3.4 arrTheArray[theIndex] = 3.4
theIndex=  2  v=  5.6 arrTheArray[theIndex] = 5.6
theIndex=  3  v=  7.6 arrTheArray[theIndex] = 7.6
theIndex=  4  v=  8.2 arrTheArray[theIndex] = 8.2
0 0 0
0 1 1
0 2 2
||
1 0 10
1 1 11
1 2 12
||
2 0 20
2 1 21
2 2 22
||

五、分支

if - else 分支是和其他语言类似的。不同的是没有括号。如下面程序所示:

package main
import "fmt"
func main(){
  i:=18;
  j:=90;
  if j%i>0 {
    fmt.Println(j,"%",i," 这是偶数")
  }else{
    fmt.Println(j,"%",i," 这是奇数")
  }
  if j/i >5 {
    fmt.Println(j,"/",i,">5")
  }else if j/i ==5 {
    fmt.Println(j,"/",i,"=",5)
  }
}

执行结果如下:

D:\Documents\GoTrial>go run ifelse.go
90 % 18  这是奇数
90 / 18 = 5

go也有switch-case分支,和c,java是类似的。由于这种分支容易出错,不容易阅读,因此不提倡使用,应该用 if-else if -else 替代。
所以就不展开讲了。


2020-1-5 初始版本

相关文章

网友评论

      本文标题:Tank技术【3-4】GoLang语法实战学习(2)

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