一、Go 语言基础语法
-
变量声明与初始化
-
声明变量
- 在 Go 语言中,可以使用
var关键字来声明变量。例如,var age int声明了一个名为age的整数类型变量。变量在声明后会被自动初始化为其类型的零值。对于整数类型,零值是 0;对于字符串类型,零值是空字符串"";对于布尔类型,零值是false。
- 在 Go 语言中,可以使用
-
初始化变量
- 可以在声明变量时进行初始化,如
var name string = "John"。Go 语言还支持简短声明方式,使用:=操作符。例如,count := 10声明并初始化了一个名为count的整数变量。但要注意,简短声明只能在函数内部使用。
- 可以在声明变量时进行初始化,如
-
-
数据类型
-
基本数据类型
- 整数类型:Go 语言有多种整数类型,包括
int(根据操作系统平台可能是 32 位或 64 位)、int8(8 位有符号整数)、int16(16 位有符号整数)、int32(32 位有符号整数)、int64(64 位有符号整数)。还有对应的无符号整数类型uint、uint8等。例如,var num int32 = 100。 - 浮点类型:
float32和float64用于表示小数。float32的精度较低,float64精度更高,更常用。如var pi float64 = 3.14159。 - 布尔类型:只有
true和false两个值,用于条件判断等。例如,var isTrue bool = true。 - 字符串类型:用双引号
""包裹,是不可变的字符序列。例如,var greeting string = "Hello, World!"。
- 整数类型:Go 语言有多种整数类型,包括
-
复合数据类型
- 数组(Array) :是具有固定长度的同类型元素的集合。例如,
var numbers [5]int声明了一个包含 5 个整数的数组。可以通过索引来访问和修改数组元素,如numbers[0] = 1。 - 切片(Slice) :切片是对数组的抽象,它可以动态地增长和收缩。可以通过
make函数创建切片,如s := make([]int, 3)创建了一个长度为 3 的整数切片。切片支持很多操作,如append函数可以添加元素,s = append(s, 4)会在切片s的末尾添加元素 4。 - 结构体(Struct) :用于组合不同类型的数据。例如,
type Person struct {name string; age int}定义了一个名为Person的结构体,然后可以创建结构体变量p := Person{"Alice", 25}。
- 数组(Array) :是具有固定长度的同类型元素的集合。例如,
-
-
控制流语句
-
条件语句(if - else)
- 用于根据条件执行不同的代码块。例如,
if temperature > 30 {fmt.Println("It's hot")} else {fmt.Println("It's not hot")},这里根据温度变量temperature的值来决定输出的内容。
- 用于根据条件执行不同的代码块。例如,
-
循环语句(for)
-
Go 语言的
for循环功能强大。最基本的形式是for i := 0; i < 10; i++ {fmt.Println(i)},这会打印从 0 到 9 的数字。for循环还可以用于遍历数组、切片等数据结构,如numbers := []int{1, 2, 3}; for _, num := range numbers {fmt.Println(num)},这里range关键字用于遍历切片numbers,_表示忽略索引(如果不需要的话)。
-
-
二、Go 语言常用特性
-
函数(Function)
- 定义函数:使用
func关键字定义函数。例如,func add(a, b int) int {return a + b}定义了一个名为add的函数,它接受两个整数参数a和b,并返回它们的和。 - 函数参数和返回值:函数可以有多个参数和返回值。例如,
func swap(a, b int) (int, int) {return b, a}实现了交换两个整数的功能,它返回两个值。 - 函数作为参数和返回值:Go 语言支持将函数作为参数传递给其他函数,也可以作为函数的返回值。例如,
func calculate(op func(int, int) int, a, b int) int {return op(a, b)},这里op是一个函数类型的参数,可以传入不同的数学运算函数。
- 定义函数:使用
-
并发编程(Concurrency)
- Go 协程(Goroutine) :Go 协程是一种轻量级的线程,通过
go关键字来启动。例如,go func() {fmt.Println("Hello from a goroutine")}会启动一个新的协程来执行匿名函数中的代码。多个协程可以同时运行,大大提高了程序的并发性能。 - 通道(Channel) :通道用于协程之间的通信和同步。可以使用
make函数创建通道,如ch := make(chan int)创建了一个整数类型的通道。协程可以通过<-操作符来发送和接收数据,如ch <- 5(发送数据)和num := <-ch(接收数据)。通道可以是无缓冲的(同步通道)或者有缓冲的(异步通道),有缓冲的通道可以存储一定数量的数据,例如ch := make(chan int, 3)创建了一个可以存储 3 个整数的缓冲通道
- Go 协程(Goroutine) :Go 协程是一种轻量级的线程,通过
Go语言具有强大的并发编程能力、高效的执行性能和丰富的生态系统,因此在服务器端开发、网络编程、数据处理、云计算、微服务、Web开发等领域都有广泛的应用。