这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
一、本堂课重点内容:
- go 语言中的变量类型、定义及其初始化
go中共有以下12种内置的数据类型:int8 int16 int32 int64 uint8 uint16 uint32 uint64 float32 float64 bool string
其中:int类型在64位系统默认占8个字节,在32位系统默认占4个字节;uint: 64位系统占8个字节,32位系统占4个字节;
变量的3种定义及初始化方式:
(1) var 变量名称 数据类型 = 初值,例如:var a int = 2;
(2) a:=2;
(3) var a = 2,编译器将自行推断确定变量a的数据类型;
- go语言中的if-else语句和switch语句 (1)if-else语句: if 条件表达式 代码块1 else 代码块2
需要注意的是,条件表达式两侧不加括号
变量的定义可以写在条件表达式前面,如下面的例子所示:
if score:=60;score>=60{
fmt.Println("good")
} else{
fmt.Println("bad")
}
(2)switch语句
go语言中的switch语句不像c语言中的,go中只会走一个case,不需要显著加break语句;
default语句可以写在任意位置,不像c语言中要求写在最后面;
switch scores/10 {
case 10,9,8:
fmt.Println("good")
case 7,6:
fmt.Println("just so so")
fallthrough //穿透下一层case,只穿透一层
case 5:
fmt.Println("fallthrough")
default:
fmt.Println("bad")
}
- go语言中的循环:go语言中只有for循环这一种循环方式,简洁使用
与c语言中不同的是:循环控制语句不需要加括号;
//go 中的循环
var sum int = 0
var i int
for i := 1; i<=100; i++{
sum+=i
}
fmt.Println(i,sum)
- go语言中的结构体
注意:结构体内部变量名首字母大写,外界可以访问这个属性;
可以为自定义的结构体变量类型绑定自定义的函数方法;如果想要通过函数方法改变结构体内部变量的值,则需要使用地址传递;
type Techer struct{
Name string//变量名大写,外界可以访问这个属性
Age int
School string
}
type student struct{
Name string//变量名大写,外界可以访问这个属性
Age int
School string
}
//为结构体student绑定方法:printname,该方法只能由student对象调用
func (s student) printname(){//参数值传递
fmt.Println(s.Name)
}
func (t *Techer) changename(){//地址传递需要用指针
t.Name="WQ"
}
- go语言的数组和切片
因为数组的容量无法动态扩展,所以go语言中较多使用的是切片
切片的概念和python中的很像,切片是建立在数组之上的,是对数组连续片段的一个引用,一般不指定其长度;
注意切片是左闭右开的:var slice = arr[1:4]//左闭右开,index=1,2,3
切片的本质是一个结构体,包含三部分: 底层数组的指针 切片的长度 切片的容量
推荐通过make函数创建一个切片:make 函数底层会创建一个数组,但是该数组对外不可见,外部不可以访问
//切片是建立在数组之上的,是对数组连续片段的一个引用,一般不指定其长度
var arr = [6]int{1,2,3,4,5,6}
var slice = arr[1:4]//左闭右开,index=1,2,3
fmt.Println("arr:",arr)
fmt.Println("slice:",slice)
fmt.Println("slice的长度:",len(arr))
fmt.Println("slice的容量:",cap(slice))//容量的计算有点复杂,后续再看
/*切片的本质是一个结构体,包含三部分:
底层数组的指针 切片的长度 切片的容量 */
//二者一致
fmt.Printf("arr index=1元素的地址:%p\n",&arr[1])
fmt.Printf("slice index=0元素的地址:%p\n",&slice[0])
//所以,切片的指针指向了数组中的某个指定位置,可以通过切片更改数组中元素的值
slice[1] = 100
fmt.Println("arr:",arr)
fmt.Println("slice:",slice)
//方式2:通过make函数创建一个切片
//make 函数底层会创建一个数组,但是该数组对外不可见,外部不可以访问
slice2 := make([]int,5,10)//make(类型,切片长度,切片容量)
slice2[0] = 10
slice2[4] = 50
fmt.Println(slice2)
//方式3:直接指定具体数组
slice3 := []int{1,3,5,7,9}
fmt.Println(slice3)
- go语言中的格式化输出printf
Println采用默认格式将其参数格式化并写入标准输出。 总是会在相邻参数的输出之间添加空格并在输出结束后添加换行符。
%v:值的默认格式表示
%+v: 类似%v,但输出结构体时会添加字段名
%#v: 值的Go语法表示
s:="hello"
n:=123
p:=point{1,2}
/*
Println采用默认格式将其参数格式化并写入标准输出。
总是会在相邻参数的输出之间添加空格并在输出结束后添加换行符。
*/
fmt.Println(s,n)
fmt.Println(p)
fmt.Printf("s=%v\n",s)//%v:值的默认格式表示
fmt.Printf("n=%v\n",n)
fmt.Printf("p=%v\n",p)
fmt.Printf("p=%+v\n",p)//类似%v,但输出结构体时会添加字段名
fmt.Printf("p=%#v\n",p)//值的Go语法表示
f:=3.141592653
fmt.Println(f)
fmt.Printf("%.2f\n",f)//%.2f :默认宽度,精度2
二、详细知识点介绍:
- go语言基础语法
三、实践练习例子:
- 参考“一”
四、课后个人总结:
本节课内容较为基础,建议多用多熟悉即可。