随机数

  • math/rand实现了伪随机数生成器。
  • 在Go语言中随机数需要设置种子,如果不设置种子随机数的结果每次都会相同。
  • 默认种子是1,而且同种子产生的随机数是相同的。
  • 可以使用当前时间的纳秒差计算随机数,在一定程度上保证了种子的唯一性。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
"math/rand"
"time"
"fmt"
)

func main() {
rand.Seed(time.Now().UnixNano())
fmt.Println(rand.Int63n(10))
fmt.Println(rand.Int63n(10))
fmt.Println(rand.Int63n(10))
fmt.Println(rand.Int63n(10))
}

数组

  • 数组:具有固定长度相同类型的元素序列。

  • 声明数组的语法

    1
    2
    3
    4
    // var 对象名 [长度]元素类型

    var arr [5]int
    fmt.Println(arr) //输出【0 0 0 0 0】
  • 数组就是内存中一段固定长度的连续空间

  • 声明数组后数组就会在内存中开辟一块连续空间,每个值都称为元素,且元素值为类型对应的默认值,列入int类型默认值为0,String类型默认值为空字符串。

  • 数组中每个元素按照顺序都有自己整数类型的脚标,脚标从第一个元素0向后依次为1

    声明var arr[int] 数组
    arr[0] = 0 arr[1] = 0 arr[2] = 0
  • 数组中实际开发中主要作用是充当临时容器,因为声明一个数组变量比声明多个相同类型变量在操作时更方便。

数组的创建和赋值

  • 可以在声明数组时可以同时给数组赋值,赋值时要求长度必须大于等于初始值个数。
1
2
3
4
5
6
7
8
9
10
11
12
package main

func main() {
// 方式1:完整写法
var arr [3]int = [3]int{1,2,3}
//方式2:短变量方式
arr2 := [3]int{1,2,3}
//方式3:长度大于初始值。长度为4,只给钱三个元素赋值,其余元素回是默认值
arr3 := [4]int{1,2,3}
//方式4:赋值时长度不变,数据长度根据元素个数确定
arr4 := [...]int{1,2,3}
}
  • 我们可以通过数组名[脚表]对数组中元素进行操作
1
2
3
4
5
6
7
8
9
10
11
arr1 := [3]int{1,2,3}
//通过下表的方式来取出数组中的某一个值
fmt.Println(arr1[2])

//可以通过数组+下标 的方式对数据中的指定元素进行重新赋值
arr1[2] = 10
fmt.Println(arr1)

//通过len函数来获取数组的长度
//取下标需要-1 如果超出数组的下标范围会报错
fmt.Println(len(arr1))

fot循环

  • 循环:让程序多次运行相同的代码

  • for循环是go语言中唯一一个循环结构。

  • for循环经典语法

    • 先执行表达式1
    • 执行表达式判断是否成立,如果成立执行循环体
    • 循环体执行完成之后执行表达式3
    • 再次执行表达式2,判断是否成立
    1
    2
    3
    4
    5
    for 表达式1;表达式2;表达式3{
    // 循环体
    fmt.Println("循环的是我!")

    }
  • for循环用的最多的地方就是遍历数组切片等。

1
2
3
4
5
6
7
8
9
10
11
// for 的表达式 1 2 3都可以不填,因为没有了结束条件最终表达式是一个死循环。
for{
fmt.Println("张卫宁")
}

//界与正常写法和死循环之间的 for循环,可以把i定义在外面。
i:= 0
for i<5{
fmt.Println("张卫宁!")
i++
}

大多数会使用第一种方案。