在go语言中,有一种特殊的if语句用法。
实例:if statement,condition{
}
package main import "fmt" func main() { //此处num为局部变量 if num := 4; num > 0 { fmt.Printf("number=%dn", num) } //此处为全局变量 num1 := 2 fmt.Println(num1) }结果:
2.随机数number=4
2
调用rand关键字可以生成随机数,随机数是由一个源产生的,我们习惯叫它为种子。类型为整型。假如种子数相同,那么生成的随机数就相同。如果我们想让随机数不相同,那么就调用seed来改变随机数。
实例1:package main import ( "fmt" "math/rand" ) func main() { num1 := rand.Int() fmt.Println(num1) }结果:
5577006791947779410
注:因为种子数是固定的,所以不管运行多少次,结果都是一样的。
实例2:for i := 0; i < 10; i++ { num := rand.Intn(10) //Intn(n)代表的意思是随机生成一个[0,n)的数 fmt.Println(num) }结果:
实例3(设置种子数):7
7
9
1
8
5
0
6
0
4
rand.Seed(10) num := rand.Intn(10) fmt.Println(num)结果:
实例4(改变种子数):4
rand.Seed(100) num := rand.Intn(10) fmt.Println(num)结果:
3.时间戳3
那么,我们要想生成不同的随机数,该怎么 *** 作呢。此时,我们便可想到时间,它是随机改变的。因此,我们可以利用时间来生成不同的随机数。时间戳:指定时间,距离1970年1月1日0时0分0秒之间的时间差值。有秒和纳秒,分别用Unix和Unixnano来访问。
实例1:package main import ( "fmt" "time" ) func main() { t := time.Now() //访问当前时间 fmt.Println(t) fmt.Printf("%T", t) }结果:
2022-01-25 11:48:23.2344592 +0800 CST m=+0.003721801
time.Time(类型)
实例2:
package main import ( "fmt" "time" ) func main() { t := time.Now() //访问当前时间 fmt.Println(t) fmt.Printf("%Tn", t) t1 := t.Unix() fmt.Println(t1) t2 := t.UnixNano() fmt.Println(t2) }结果:
实例3:2022-01-25 13:14:41.4386937 +0800 CST m=+0.003747301
time.Time
1643087681
1643087681438693700
package main import ( "fmt" "math/rand" "time" ) func main() { //设置种子数 rand.Seed(time.Now().UnixNano()) for i := 0; i < 10; i++ { fmt.Println(rand.Intn(10)) } }结果:
实例4:9
2
7
9
9
0
9
2
8
6
若想设置随机数在[n,m)之间(n!=0),那么格式如下:
rand.Seed(time.Now().Unix()) for i := 0; i < 10; i++ { fmt.Println("-->", rand.Intn(10)+3) //[3,13) }4.遍历数组 实例1:
package main import ( "fmt" ) func main() { var arr [5]int for i := 0; i < len(arr); i++ { arr[i] = 2*i + 1 } fmt.Println(arr) for index, number := range arr { fmt.Printf("下标是:%d,数值是:%dn", index, number) } }结果:
实例2:[1 3 5 7 9]
下标是:0,数值是:1
下标是:1,数值是:3
下标是:2,数值是:5
下标是:3,数值是:7
下标是:4,数值是:9
//不想取值可以用下划线代替 for _, v := range arr { sum += v } fmt.Println(sum) sum1 := 0 for index1, _ := range arr { sum1 += index1 } fmt.Println(sum1)结果:
5.数组和切片复制25
10
package main import "fmt" func main() { arr := [4]int{0, 1, 2, 3} arr1 := arr //值传递 arr[0] = 100 fmt.Println(arr, arr1) s := []int{0, 1, 2, 3} s1 := s s[0] = 100 fmt.Println(s, s1) }结果:
[100 1 2 3] [0 1 2 3]
[100 1 2 3] [100 1 2 3]
可见,数组的复制是创建新地址来储存相同的数据,因此原数组arr改变不导致arr1改变。
而,切片的s是先获取数据的地址,s1的地址与s相同,因此两者一起改变。
如图:
6.map与slice的结合package main import "fmt" func main() { //第一个人 map1 := make(map[string]string) map1["name"] = "Curry" map1["number"] = "30" map1["team"] = "Warriors" //第二个人 map2 := make(map[string]string) map2["name"] = "Thompson" map2["number"] = "11" map2["team"] = "Warriors" //第三个人 map3 := make(map[string]string) map3["name"] = "Doncic" map3["number"] = "77" map3["team"] = "Mavericks" //将map存入slice中 s1 := make([]map[string]string, 0, 6) s1 = append(s1, map1) s1 = append(s1, map2) s1 = append(s1, map3) //遍历切片 for i, imfor := range s1 { fmt.Printf("第%d个人的信息是:n", i+1) fmt.Printf("t姓名:%sn", imfor["name"]) fmt.Printf("t号码:%sn", imfor["number"]) fmt.Printf("t球队:%sn", imfor["team"]) } }结果:
7.长度和容量第1个人的信息是:
姓名:Curry
号码:30
球队:Warriors
第2个人的信息是:
姓名:Thompson
号码:11
球队:Warriors
第3个人的信息是:
姓名:Doncic
号码:77
球队:Mavericks
切片的长度,显而易见的就是元素的个数,根据元素的个数进行返回具体的长度。
切片的长度,更像是一个警戒值,如果长度与容量相等,就会进行容量的扩容,比如
des :=make([]int , 3 , 5) //此时,长度为3,容量为5,但是如果使用append(), //切片长度会变为4,再次使用append()切片长度变为5。 //此时,切片长度与容量相同,此时,切片的容量增大变为cap = len*2
也就是通过一个容量设警戒值,如果等于警戒值,就会自动将切片进行扩容
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)