第2章:Go语言基础语法
1. 变量和数据类型
1.1 基本数据类型
Go语言提供了以下基本数据类型:
// 整数类型
var intVar1 int // 根据系统位数,32或64位
var intVar2 int8 // -128 到 127
var intVar3 int16 // -32768 到 32767
var intVar4 int32 // -2^31 到 2^31-1
var intVar5 int64 // -2^63 到 2^63-1
// 无符号整数类型
var uintVar1 uint // 32或64位
var uintVar2 uint8 // 0 到 255
var uintVar3 uint16 // 0 到 65535
var uintVar4 uint32 // 0 到 2^32-1
var uintVar5 uint64 // 0 到 2^64-1
// 浮点数类型
var floatVar1 float32 // 32位浮点数
var floatVar2 float64 // 64位浮点数
// 布尔类型
var boolVar bool // true 或 false
// 字符串类型
var strVar string // 字符串
// 字符类型(实际是int32的别名)
var charVar rune // Unicode字符
1.2 变量声明和初始化
Go语言提供多种变量声明方式:
// 方式1:完整声明
var name string = "张三"
// 方式2:类型推断
var age = 25 // 自动推断为int
// 方式3:短变量声明(只能在函数内使用)
username := "admin"
// 多变量声明
var x, y int = 10, 20
// 批量声明
var (
width = 100
height = 200
)
1.3 类型转换
// 基本类型转换
var intVar int = 42
var floatVar float64 = float64(intVar) // 显式转换
// 字符串转换
ageStr := "25"
age, err := strconv.Atoi(ageStr) // 字符串转整数
if err != nil {
fmt.Println("转换错误:", err)
}
// 整数转字符串
numStr := strconv.Itoa(age)
2. 运算符
2.1 算术运算符
a := 10
b := 3
fmt.Println("加法:", a + b) // 13
fmt.Println("减法:", a - b) // 7
fmt.Println("乘法:", a * b) // 30
fmt.Println("除法:", a / b) // 3
fmt.Println("取模:", a % b) // 1
// 自增和自减(只能作为独立语句)
a++ // 等价于 a = a + 1
b-- // 等价于 b = b - 1
2.2 比较运算符
x := 5
y := 10
fmt.Println("等于:", x == y) // false
fmt.Println("不等于:", x != y) // true
fmt.Println("大于:", x > y) // false
fmt.Println("小于:", x < y) // true
fmt.Println("大于等于:", x >= y) // false
fmt.Println("小于等于:", x <= y) // true
2.3 逻辑运算符
isTrue := true
isFalse := false
fmt.Println("与运算:", isTrue && isFalse) // false
fmt.Println("或运算:", isTrue || isFalse) // true
fmt.Println("非运算:", !isTrue) // false
3. 控制流
3.1 if/else语句
// 基本if语句
score := 85
if score >= 90 {
fmt.Println("优秀")
} else if score >= 60 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}
// 带初始化的if语句
if num := getValue(); num > 0 {
fmt.Println("正数")
}
3.2 switch语句
// 基本switch
day := 3
switch day {
case 1:
fmt.Println("星期一")
case 2:
fmt.Println("星期二")
default:
fmt.Println("其他日期")
}
// 多条件switch
switch x := 5; x {
case 1, 3, 5:
fmt.Println("奇数")
case 2, 4, 6:
fmt.Println("偶数")
default:
fmt.Println("未知")
}
// 不带条件的switch
switch {
case x > 0:
fmt.Println("正数")
case x < 0:
fmt.Println("负数")
default:
fmt.Println("零")
}
3.3 for循环
// 基本for循环
for i := 0; i < 5; i++ {
fmt.Println(i)
}
// while类型循环
j := 0
for j < 5 {
fmt.Println(j)
j++
}
// 无限循环
for {
// 执行操作
// break可以退出循环
}
// 遍历数组/切片
numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
fmt.Printf("索引:%d, 值:%d\n", index, value)
}
4. 函数
4.1 函数定义和调用
// 基本函数
func add(a int, b int) int {
return a + b
}
// 调用函数
result := add(10, 20)
fmt.Println(result) // 30
4.2 多返回值
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("除数不能为零")
}
return a / b, nil
}
quotient, err := divide(10, 2)
if err != nil {
fmt.Println("错误:", err)
} else {
fmt.Println("结果:", quotient)
}
4.3 匿名函数和闭包
// 匿名函数
greet := func(name string) {
fmt.Println("Hello,", name)
}
greet("Go")
// 闭包示例
func counter() func() int {
count := 0
return func() int {
count++
return count
}
}
nextCount := counter()
fmt.Println(nextCount()) // 1
fmt.Println(nextCount()) // 2
4.4 递归函数
// 阶乘递归
func factorial(n int) int {
if n <= 1 {
return 1
}
return n * factorial(n-1)
}
fmt.Println(factorial(5)) // 120