实践:Go语言基础语法和常用特性解析(一) | 青训营
今天总结一下学习Go语言的基础语法以及常用特性,结合课上给的示例代码加强对Go语言的掌握。
一、变量使用
在进行变量使用之间,要知道Go语言是一门强类型语言,每个变量都有自己的变量类型
1、变量声明和初始化
在Go语言中,可以使用var关键字声明一个变量,并根据需要进行初始化。变量的类型可以是内置类型或自定义类型。
(1)声明一个整型变量x并初始化为0
var x int
(2) 同时声明多个变量,并初始化为默认值
var a, b, c int
var str string
var flag bool
(3) 声明并初始化一个字符串类型的变量
var name string = "John Doe"
(4)使用**:=**运算符进行变量的声明和初始化(仅在函数内部有效)
age := 25
2、常量定义和初始化
Go语言中的常量是在编译时就确定其值,并且在程序执行期间不可改变的标识符。常量可以是内置类型或自定义类型。
(1)定义一个整型常量
const year = 2023
(2)定义一个字符串常量
const greeting string = "Hello, world!"
(3) 定义多个常量
const (
monday = "Monday"
tuesday = "Tuesday"
wednesday = "Wednesday"
)
3、基本数据类型
Go语言提供了一些常用的基本数据类型,包括整型、浮点型、布尔型和字符串。
(1)整型
var num1 int = 10
(2)浮点型
var weight float32 = 60.5 var height float64 = 175.0
(3)布尔型
var isTrue bool = true
(4)字符串
var message string = "Hello, world!"
(5)多行字符串
var multiLineString string = `
This is a
multi-line string
`
二、流程控制
1、循环
循环结构允许重复执行一段代码块,直到满足特定条件为止。Go语言提供了多种类型的循环,包括for循环、while循环和do-while循环。
- for循环:for循环是最常用的循环结构,它可以按照指定的条件重复执行代码块。通常使用
for i := 0; i < n; i++的形式来控制循环的次数。 - while循环:使用
for关键字来模拟while循环,只需省略初始语句和递增语句。 - do-while循环:Go语言中没有内置的do-while循环,但可以使用for循环来实现类似的功能。
2、条件语句
条件语句用于根据不同的条件选择执行不同的代码块。Go语言提供了if-else语句和switch语句来实现条件控制。
- if-else语句:用于根据条件选择执行不同的代码块。可以使用多个if-else语句来处理多个条件。
- switch语句:用于在多个选项中选择一个执行代码块。每个case后面的值与表达式进行比较,匹配成功时执行相应的代码块。
3、跳转语句
跳转语句用于在代码中控制程序的执行流程,在特定条件下改变代码的执行顺序。Go语言提供了break、continue和goto关键字来实现跳转。
- break语句:用于在循环或switch语句中终止当前循环或switch语句,并继续执行下一行代码。
- continue语句:用于跳过当前循环中剩余的代码,并继续下一次循环迭代。
- goto语句:用于无条件地转到程序中的标签处。尽量少使用goto语句,因为过多的使用会导致程序难以理解和调试。
四、函数
1、函数定义和调用
(1)使用func关键字来定义函数,后面跟着函数名、参数列表、返回值类型和函数体。
func add(a, b int) int {
return a + b
}
(2)通过函数名加上实参列表来调用函数,并接收函数返回的结果。
result := add(3, 4)
fmt.Println(result)
2、函数参数和返回值处理
(1)函数可以接受零个或多个参数,并且每个参数都有对应的类型。参数可以是基本类型、复合类型或接口类型。
func greet(name string) {
fmt.Println("Hello,", name)
}
func calculate(a, b int, operator string) int {
switch operator {
case "+":
return a + b
case "-":
return a - b
default:
fmt.Println("Unsupported operator")
return 0
}
}
(2)函数可以返回一个或多个值。可以使用元组(也称为多返回值)的形式返回多个值。
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
quotient := a / b
return quotient, nil
}
result, err := divide(10, 3)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
五、指针
- 指针可以在程序中操作数据的内存地址,通过指针,可以直接访问和修改内存中的数据,而无需进行复制或传递。
- 在 Go 中,使用
&运算符来获取变量的内存地址。比如说,有一个名为num的整数变量,那么&num就表示num变量的内存地址。 - 可以使用
*运算符来声明指针类型,并将指针指向特定的内存地址。比如说,var ptr *int表示ptr是一个指向整数类型的指针。 - 使用指针可以非常方便地在函数之间共享和修改数据,同时也可以避免大量的数据复制。但是,在使用指针时要小心,确保指针不为空或未初始化,以防止空指针错误。
六、结构体
1、定义
- 结构体是一种自定义的数据类型,将不同类型的字段组合在一起,形成一个具有多个属性的新类型。
- 可以看作是一个模板或蓝图,它定义了数据以及操作数据的方法。
- 相较于Java类,结构体更简洁,内存占用和访问速度更加高效,组合方式更加灵活。
2、定义一个名为 Person 的结构体
type Person struct {
Name string
Age int
Gender string
}
3、创建一个结构体变量并初始化
p := Person{
Name: "Alice",
Age: 25,
Gender: "Female",
}
3、访问结构体字段并进行修改
fmt.Println("Name:", p.Name)
fmt.Println("Age:", p.Age)
fmt.Println("Gender:", p.Gender)
p.Age = 26
fmt.Println("Updated Age:", p.Age)