go语言中的变量 | 青训营笔记

106 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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语言基础语法

三、实践练习例子:

  • 参考“一”

四、课后个人总结:

本节课内容较为基础,建议多用多熟悉即可。