一、Go 语言简介
Go 语言(也称为 Golang)是 Google 开发的一种开源编程语言。它具有高效、简洁、并发性强等诸多优点,适用于网络编程、云计算、分布式系统等众多领域。
(一)安装 Go 语言环境
下载安装包 可以从 Go 官方网站(golang.org/dl/)下载适合您操作… Windows 系统,下载.msi 文件;对于 Linux 系统,下载.tar.gz 文件。 安装和配置环境变量 在 Windows 系统中,运行安装程序并按照提示完成安装。安装完成后,需要设置GOROOT环境变量,其值为 Go 语言的安装目录,例如C:\Go。同时将%GOROOT%\bin添加到PATH环境变量中,这样就可以在命令行中使用 Go 相关
的工具。 在 Linux 系统中,解压下载的.tar.gz文件到合适的目录,如/usr/local/go。然后在~/.bashrc或~/.zshrc等配置文件中添加export GOROOT = /usr/local/go和export PATH=GOROOT/bin,保存后执行source ~/.bashrc(或对应的配置文件加载命令)来使配置生效。
二、基础语法
(一)变量声明与赋值
1.变量声明
Go 语言有多种变量声明方式。最基本的方式是使用var关键字。例如,声明一个整数变量x:
var x int
也可以同时声明多个变量,如:
var a, b int
Go 语言还支持短变量声明方式,使用:=操作符。例如:
y := 10
这种方式只能在函数内部使用,并且变量必须是未声明过的新变量。它会自动根据赋值的类型来推断变量的类型。
(二)数据类型
基本数据类型
1.整数类型:Go 语言有多种整数类型,包括int(有符号整数,其大小根据操作系统的位数而定,在 32 位系统中是 32 位,在 64 位系统中是 64 位)、int8(8 位有符号整数,范围是 - 128 到 127)、int16(16 位有符号整数)、int32(32 位有符号整数)、int64(64 位有符号整数)、uint(无符号整数,大小也根据操作系统而定)、uint8(8 位无符号整数,范围是 0 到 255)等。
2.浮点数类型:有float32和float64。float32的精度较低,float64精度较高,通常用于更精确的数值计算。
var f1 float32 = 3.14 var f2 float64 = 3.1415926
3.布尔类型:bool类型只有两个值,true和false。
var flag bool = true
4. 字符类型:Go 语言中的字符类型是rune,它实际上是int32的别名,用于表示一个 Unicode 字符。
var c rune = 'A'
5.复合数据类型
数组:数组是具有固定长度的同类型元素的集合。例如,声明一个包含 5 个整数的数组: go Copy var arr [5]int 可以通过索引来访问数组元素,如arr[0]表示数组的第一个元素。数组的长度是其类型的一部分,所以[5]int和[6]int是不同的类型。
切片:切片是对数组的一个引用,它的长度可以动态变化。创建切片的一种方式是通过make函数。例如: go Copy s := make([]int, 3) 这个切片s的初始长度为 3,它可以通过append函数来添加元素,如s = append(s, 4)。
结构体:结构体是一种自定义的数据类型,它可以包含多个不同类型的字段。
type Person struct {
Name string
Age int
}
(三)控制流
1.条件语句
x := 10
if x > 5 {
fmt.Println("x is greater than 5")
} else {
fmt.Println("x is less than or equal to 5")
}
还可以有if - else if - else的多级判断形式。例如:
score := 80
if score >= 90 {
fmt.Println("A")
} else if score >= 80 {
fmt.Println("B")
} else if score >= 60 {
fmt.Println("C")
} else {
fmt.Println("D")
}
2.循环语句
score := 80
if score >= 90 {
fmt.Println("A")
} else if score >= 80 {
fmt.Println("B")
} else if score >= 60 {
fmt.Println("C")
} else {
fmt.Println("D")
}
range 循环:range用于遍历数组、切片、字符串等。例如,遍历一个切片:
s := []int{1, 2, 3}
for index, value := range s {
fmt.Printf("Index: %d, Value: %d\n", index, value)
}
三、常用特性
(一)函数
函数定义 函数是 Go 语言中的基本构建块。一个简单的函数定义如下:
func add(x int, y int) int {
return x + y
}
可以在函数定义中省略参数类型的重复声明,写成func add(x, y int) int。函数可以有多个返回值,例如:
func divide(x, y int) (int, error) {
if y == 0 {
return 0, fmt.Errorf("除数不能为0")
}
return x / y, nil
}
(二)并发编程
1.Go 协程(Goroutine)
Go 协程是 Go 语言中实现并发的轻量级线程。通过go关键字可以启动一个协程。例如:
func printNumbers() {
for i := 1; i <= 10; i++ {
fmt.Println(i)
}
}
func main() {
go printNumbers()
// 主协程可以继续执行其他任务
for i := 1; i <= 5; i++ {
fmt.Println("Main:", i)
}
}
在上面的例子中,printNumbers函数作为一个协程被启动,它和主协程(main函数所在的协程)会并发执行。
2.通道(Channel)
通道用于协程之间的通信和同步。通道可以是有类型的,例如chan int表示一个用于传递整数的通道。创建通道可以使用make函数,如ch := make(chan int)。 发送数据到通道使用<-操作符,如ch <- 5,接收通道中的数据也使用<-操作符,如x := <-ch。通道可以是无缓冲的(同步通道)或者有缓冲的。无缓冲通道会在发送和接收操作时进行同步,而有缓冲通道可以在缓冲未满或未空时异步操作。