以下是一份Go语言入门指南,包含基础语法和常用特性解析:
一、基础语法
- 变量声明与赋值
• 声明单个变量:使用 var 关键字,可同时指定类型。例如: var age int age = 25 也可以在声明时直接赋值: var age int = 25 • 声明多个变量: var name, city string name = "John" city = "New York" 还能使用类型推断,省略类型声明: var name, city = "John", "New York" Go语言中还有更简洁的短变量声明方式(只能在函数内使用): name := "John" 2. 数据类型
• 基本数据类型:
• 整数类型:如 int(根据平台可能是32位或64位)、int8(8位有符号整数)、int16、int32(也叫 rune,常用于表示Unicode字符)、int64 等。
• 浮点类型:float32 和 float64。
• 布尔类型:bool,只有 true 和 false 两个值。
• 字符串类型:string,用双引号或单引号括起来的字符序列。
• 复合数据类型:
• 数组:具有固定长度,同类型元素的集合。例如: var numbers [5]int numbers[0] = 1 • 切片:是对数组的一个连续片段的引用,长度可变。可以通过 make 函数创建: slice := make([]int, 3) // 创建一个长度为3的int切片 • 映射(Map):类似于其他语言中的字典,是键值对的集合。例如: m := make(map[string]int) m["key"] = 1 • 结构体:可以将不同类型的数据组合在一起。例如: type Person struct { Name string Age int }
p := Person{Name: "John", Age: 25} 3. 控制流语句
• if语句: if condition { // 满足条件时执行的代码 } else if anotherCondition { // 满足另一个条件时执行的代码 } else { // 其他情况执行的代码 } 注意,Go语言的 if 语句条件判断部分不需要括号,但 if 后的大括号是必须的。
• for语句:
• 常规循环形式: for i := 0; i < 10; i++ { // 循环执行的代码 } • 类似 while 循环形式(省略初始条件和步长): i := 0 for i < 10 { // 循环执行的代码 i++ } • 无限循环形式: for { // 无限循环执行的代码,可通过内部条件判断等方式跳出 } • switch语句: switch variable { case value1: // 当variable等于value1时执行的代码 case value2: // 当variable等于value2时执行的代码 default: // 当variable不等于任何case值时执行的代码 } Go语言的 switch 语句不需要在每个 case 后面加 break,它默认只会执行匹配到的 case 那部分代码。
- 函数
• 函数定义: func add(a, b int) int { return a + b } 函数可以有多个参数和一个返回值,参数和返回值都需要明确指定类型。
• 函数调用: result := add(3, 5) 二、常用特性
- 并发编程
Go语言内置支持并发编程,通过 goroutine 和 channel 实现。
• goroutine:是一种轻量级的线程,可以通过在函数调用前添加 go 关键字来启动一个 goroutine。例如: func printNumbers() { for i := 1; i <= 10; i++ { fmt.Println(i) } }
func main() { go printNumbers() // 启动一个goroutine执行printNumbers函数 // 主函数可以继续执行其他代码,这里可以添加等待机制等确保goroutine执行完成 } • channel:用于在不同的 goroutine 之间传递数据,是一种类型安全的通信机制。可以通过 make 函数创建: ch := make(channel int) 然后在不同的 goroutine 中发送和接收数据: func sendData(ch channel int) { for i := 1; i <= 5; i++) { ch <- i // 向通道发送数据 } close(ch) }
func receiveData(ch channel int) { for data := range ch { fmt.Println(data) } }
func main() { ch := make(channel int) go sendData(ch) go receiveData(ch) // 主函数可以添加等待机制确保数据传输完成 } 2. 错误处理
Go语言采用一种独特的错误处理方式,函数通常返回一个值和一个可能的错误。例如: func divide(a, b int) (int, error) { if b == 0 { return 0, fmt.Errorf("除数不能为零") } return a / b, nil }
func main() { result, err := divide(10, 2) if err!= nil { fmt.Println(err) } else { fmt.Println(result) } } 当函数执行出现错误时,返回错误信息,调用者需要检查并处理这个错误。
- 包管理
Go语言使用 package 来组织代码,每个文件都属于一个特定的 package。
• 导入包:使用 import 语句,例如: import ( "fmt" "math/rand" ) • 定义包:在文件开头声明包名,例如一个文件的开头为: package main 表示该文件属于 main 包,main 包是可执行程序的包,其他包一般是库包,用于提供功能给其他包使用。
以上就是Go语言的基础语法和一些常用特性的解析,希望能帮助你入门Go语言。