GO – if判断,for循环,switch语句,数组的使用
- 2020 年 3 月 4 日
- 筆記
1.if – else if – else的使用
package main import "fmt" func main() { // 1.简单使用 var a=10 if a==10 { // 这个位置不能回车,不能换行 fmt.Println(a) } //2 if - else var b =16 if b==20 { fmt.Println("20") }else{ fmt.Println("15") } //3 if - else if - else var c =20 if c==20 { fmt.Println("20") }else if c==15 { fmt.Println("15") }else { fmt.Println("10") } }
2.for循环
package main func main() { // 基本语法 for 初始化; 条件; 自增/自减{ } }
2.1简单使用
for a:=0; a<10; a++ { fmt.Println(a) }
2.2省略初始化
a :=0 for ;a<10 ; a++ { fmt.Println(a) }
2.3省略初始化和自增自减
a :=0 for ;a<10 ; { fmt.Println(a) a++ }
2.4.省略初始化和自增自减(进阶版)
注意:两个分号省略了,(类似while循环)
a :=0 for a<10 { fmt.Println(a) a++ }
2.5.死循环
// 死循环一 for true{ fmt.Println("ak47") } // 死循环二(三部分都省略了) for { fmt.Println("ak47") break }
3.switch语句
3.1基本使用
package main import "fmt" func main() { // 1.基本使用 var a = 10 switch a { case 1: //相当于if a==1 fmt.Println("1") case 5: fmt.Println("5") case 10: fmt.Println("10") } }
3.2default
var b = 18 switch b { case 1: fmt.Println("1") case 5: fmt.Println("5") case 10: fmt.Println("10") default: //相当于else fmt.Println("你是蔡徐坤") }
3.3多表达式判断
(只要符合期中一个条件就成立)
var c = 18 switch c { case 1, 2, 5: fmt.Println("1") case 6, 7: fmt.Println("5") case 10, 15, 18: fmt.Println("10") default: fmt.Println("你是蔡徐坤") }
3.4无表达式
var d = 30 switch { case d == 20: fmt.Println("1") case d == 30: fmt.Println("5") case d == 40: fmt.Println("10") default: fmt.Println("你是蔡徐坤") }
3.5无表达式
and(和)的条件 && 或(or)的条件 ||
var e = 20 var d = 30 switch { case d == 30 && e==20: //同时成立 fmt.Println("1") case d == 30: fmt.Println("5") case d == 40: fmt.Println("10") default: fmt.Println("你是蔡徐坤") }
3.6.fallthrough
无条件执行下一个case(穿透)
var f = 2 switch { case f == 1: fmt.Println(1) case f == 2: fmt.Println(2) fallthrough //一旦碰到 fallthrough会无条件执行下面的语句 case f == 6: fmt.Println(250) fallthrough ////只要代码读到fallthrough与他紧挨着的语句,无论是否满足条件,他都会执行里面的内容 case f == 3: fmt.Println(666) }
4.数组
4.1定义数组
package main import "fmt" func main() { // 同一类元素的集合, 不允许混合不同元素 // 定义数组(定义了一个大小为4的int类型数组) var a [4]int // 四个为0的数组 fmt.Println(a) // int默认值为0 }
4.2使用数组
(从索引0开始)
package main import "fmt" func main() { var a [4]int fmt.Println(a) a[0] = 10 fmt.Println(a[0]) fmt.Println(a) }
4.3定义并赋初始值(三种方式)
package main import "fmt" func main() { // 1. //var b [4]int = [4]int{1,2,3,4} // 2. //var b = [4]int{1,2,3,4} // 3. b := [4]int{1,2,3,4} fmt.Println(b) }
4.4定义并赋初值(其他方式)
package main import "fmt" func main() { //var c [4]int = [4]int{1,2} // 只给前两个赋值 //var c [4]int = [4]int{1:2} // 只给第二个赋值,前面是索引,后面是值 //var c [4]int = [4]int{1:2,2:3} // 只给第二,三个个赋值 var c [4]int = [4]int{2:3,1:2} // 只给第二,三个个赋值 c[3] = 100 fmt.Println(c) }
4.5数组大小固定(大小一旦定义,不能改变)
package main import "fmt" func main() { //var c [4]int = [5]int{1,2} // 错的 //var c [4]int = [4]int{1,2,3,4,5} // 错的 //var c [4]int = [4]int{1,2,3,4} //a[4] = 10 //错的,最大索引为3 //fmt.Println(a[4]) //错的 }
4.6.数组的大小是类型的一部分
package main import "fmt" func main() { // 下面两个不是同一种类型(不能比较和加减) var a [3] int var b [4] int }
4.7.数组的值类型(引用类型)
// 说法不准确 (因为py中一切皆对象,不可变数据类型也是对象,对象就是地址)
// py中的不可变类型(值类型)当做参数传递到函数中,如果在函数中改变该值,原值不会变
// py中的可变类型(引用类型:地址)当做参数传递到函数中,如果在函数中改变该值,原值会改变
// go中值类型,当做参数传递时,copy一份过去,值被copy是相当于复制了一份过去
package main import "fmt" func main() { var d = [4]int{1,2,3,4} test(d) // 当做参数传递过去 fmt.Println(d) // 原值没有改变 } func test(d [4]int) { d[0] = 100 // 修改值 fmt.Println(d) // 传过来的数组改变了,但原值不变 }
4.8数组的长度(len)
package main import "fmt" func main() { var e = [4]int{1,2,3,4} fmt.Println(len(e)) }
4.9数组的循环
package main import "fmt" func main() { // 方法一: var a = [4]int{1,2,3,4} for i:=0 ;i<len(a) ;i++ { fmt.Println(a[i]) } //方式二:(range关键字,它不是内置函数)把数组放在range关键字后 var b = [4]int{1,55,3,66} for z:=range b{ //fmt.Println(z) fmt.Println(b[z]) //这不是正统的用法 } // 当用一个变量来接收时,这个变量就是索引 // 当用两个变量来接收时,这两个变量就是索引和值 for k,v:=range a { fmt.Println(k,v) } // 当你不想取索引的时候也可以用下划线代替 for _,v:=range a { fmt.Println(v) } }
4.10多维数组
package main import "fmt" func main() { var a [4][3]int fmt.Println(a) a[1][1] =100 // 修改值 fmt.Println(a) }
4.11多维数组定义并赋初值
package main import "fmt" func main() { var a = [4][3]int{{1,1,1},{2,2,2},{3,3,3},{4,4,4}} fmt.Println(a) // 把数组第二个位置初值改为[6,6,6] var b = [4][3]int{1:{6,6,6}} fmt.Println(b) var c = [4][3]string{1:{"6","6","6"}} fmt.Println(c) // 字符串的空值是空字符串 "" // int类型空值是 0 // 数组的空值,取决于类型的空值 var d [4][3]string fmt.Println(d) }