Go语言基础语法学习笔记
后端 7.25 第一门课程的课堂笔记,记不熟悉的。
以下是Go语言基础语法的学习笔记:
1. 变量声明和赋值:
使用短变量声明操作符,也就是简短声明 :=,可以同时声明和初始化变量。它的规则是至少有一个变量被声明,但不要求全部变量都是声明。也就是说,这样的代码是合法的:
var name string
name = "John"
var age int = 25
score := 90
2. 条件语句:
if 后是没有括号的,如果写上括号,编辑器在保存时会自动去掉括号;其后必须有大括号并在同一行。else必须和大括号在同一行。
if age >= 18 {
fmt.Println("成年人")
} else {
fmt.Println("未成年人")
}
3. 循环语句:
可以通过 for + range 来遍历数据类型,range 只和 for 一起用。
数组和切片会得到下标值和当前位置的内容;map 会得到 key-value 键值对。
如果不需要某个值可以用 _ 作为站位符。
for i := 0; i < 5; i++ {
fmt.Println(i)
}
names := []string{"Alice", "Bob", "Charlie"}
for index, name := range names {
fmt.Println(index, name)
}
4. 数组和切片:
数组是一个值类型,赋值通过拷贝实现。
数组的长度在定义时就固定,长度放在类型前,如果不指定长度,就获得了一个切片,切片是对数组的引用 在Go语言中,数组和切片都是用于存储一组相同类型的元素的数据结构。
数组(Array)是一个固定长度的数据结构,它在声明时需要指定长度,并且长度在运行时是不可变的。数组的元素可以通过索引访问和修改,索引从0开始。数组的声明和初始化可以使用var关键字或者简化的:=语法。
示例:
var numbers [5]int // 声明一个长度为5的整数数组
numbers[0] = 1
numbers[1] = 2
numbers[2] = 3
numbers := [5]int{1, 2, 3, 4, 5} // 声明并初始化一个长度为5的整数数组
fmt.Println(numbers[0]) // 输出数组的第一个元素
切片(Slice)是一个动态长度的数据结构,它可以根据需要自动扩容。切片是对底层数组的一个引用,它包含了一个指向底层数组的指针、长度和容量。切片的长度表示切片中元素的个数,容量表示底层数组中可访问的元素个数。
切片的声明和初始化可以使用make函数或者简化的切片字面量语法。
示例:
numbers := make([]int, 5) // 声明一个长度为5的整数切片
numbers[0] = 1
numbers[1] = 2
numbers[2] = 3
numbers := []int{1, 2, 3, 4, 5} // 声明并初始化一个整数切片
fmt.Println(numbers[0]) // 输出切片的第一个元素
切片支持使用索引和切片表达式来访问和修改元素,还可以使用内置的append函数来向切片中追加元素。
总结:
- 数组是一个固定长度的数据结构,长度在声明时确定且不可变。
- 切片是一个动态长度的数据结构,长度可以根据需要自动扩容。
- 切片是对底层数组的一个引用,它包含了指向底层数组的指针、长度和容量。
- 切片支持使用索引和切片表达式来访问和修改元素,还可以使用append函数来向切片中追加元素。
5. 函数定义和调用:
在Go语言的基础语法中,函数定义和调用如下:
func 函数名(参数列表) 返回值列表 {
// 函数体
// 可以包含多个语句
return 返回值列表
}
func关键字用于声明一个函数;函数名是用户自定义的函数名称;参数列表定义了函数的形参,可以有多个参数,每个参数由参数名和类型组成,如果有多个参数,可以使用逗号分隔;返回值列表定义了函数的返回值类型,可以有多个返回值,多个返回值之间使用逗号分隔;函数体是函数的实际执行部分,可以包含多个语句;return用于从函数中返回结果,后面跟随着要返回的变量列表,与返回值列表一一对应。
函数调用
函数名(参数列表)
函数名是已经定义好的函数名称;参数列表包含了传给函数的实参,与函数定义中的参数列表应该一一对应。如果没有参数,则留空。
这就是Go语言中函数的基本定义和调用方法。在实际使用中,我们可以根据具体需求定义自己的函数,并通过函数调用来执行函数内的逻辑。
6. 结构体和方法:
在Go语言中,结构体是一种复合的数据类型,用于将不同类型的数据组合在一起形成一个新的数据类型。结构体由一系列字段(Field)组成,每个字段都有自己的名称和类型。可以通过定义结构体来创建自定义的数据类型。 方法是与结构体相关联的函数,它可以为结构体添加行为和功能。方法与普通函数类似,但是它必须在其定义中指定接收者(Receiver),接收者可以是结构体类型或非结构体类型。 结构体是值类型,可以通过指针避免拷贝。
初始化结构体可以通过字面量和 new 的方式:
type Person struct {
name string
age int
}
func (p Person) sayHello() {
fmt.Println("Hello, my name is", p.name)
}
person := Person{name: "John", age: 25}
person.sayHello()
可以通过在函数的 func 关键字后边加上 this 的声明来表示这是结构体方法
7. 接口和实现:
在Go语言的基础语法中,接口(interface)是一种抽象类型,它定义了一组方法的集合。接口中定义的方法不包含具体的实现,而只包含方法的签名。接口可以被任意类型实现,一个类型可以实现多个接口。
接口通过在方法签名上定义参数和返回值来描述方法的行为特征,但不涉及具体的实现细节。通过定义接口,可以达到多态的效果,即一个对象可以通过不同的接口引用,并根据不同的接口调用相应的方法。
在Go语言中,通过使用关键字implements来实现接口。只要一个类型实现了接口中定义的所有方法,那么该类型就被认为是该接口的实现。
type Animal interface {
makeSound()
}
type Dog struct{}
func (d Dog) makeSound() {
fmt.Println("Woof!")
}
animal := Dog{}
animal.makeSound()
以上包括了Go语言的基本语法,包括变量声明和赋值、条件语句、循环语句、数组和切片、函数定义和调用、结构体和方法、接口和实现等。