基础语法
变量和常量
变量声明
Go 语言有多种变量声明方式:
go
// 方式 1: 使用 var 关键字
var name string = "Go"
// 方式 2: 类型推断
var name = "Go"
// 方式 3: 短变量声明(只能在函数内使用)
name := "Go"
// 方式 4: 多变量声明
var (
name string = "Go"
age int = 10
)
// 方式 5: 多变量短声明
name, age := "Go", 10零值
Go 语言中,未初始化的变量会被赋予零值:
- 数值类型:
0 - 布尔类型:
false - 字符串:
"" - 指针、切片、映射、通道、函数、接口:
nil
go
var i int // 0
var f float64 // 0.0
var b bool // false
var s string // ""常量
使用 const 关键字声明常量:
go
const Pi = 3.14159
const (
StatusOK = 200
StatusNotFound = 404
)
// iota 常量生成器
const (
Sunday = iota // 0
Monday // 1
Tuesday // 2
Wednesday // 3
)数据类型
基本类型
整数类型
go
int8, int16, int32, int64
uint8, uint16, uint32, uint64
int, uint // 根据平台决定大小
byte // uint8 的别名
rune // int32 的别名,表示 Unicode 码点浮点类型
go
float32, float64复数类型
go
complex64, complex128布尔类型
go
bool // true 或 false字符串类型
go
str := "Hello, 世界"
// 字符串是不可变的
// 支持多行字符串
str := `这是一个
多行字符串`类型转换
Go 语言要求显式类型转换:
go
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)运算符
算术运算符
go
+ // 加法
- // 减法
* // 乘法
/ // 除法
% // 取余
++ // 自增
-- // 自减比较运算符
go
== // 等于
!= // 不等于
< // 小于
<= // 小于等于
> // 大于
>= // 大于等于逻辑运算符
go
&& // 逻辑与
|| // 逻辑或
! // 逻辑非位运算符
go
& // 按位与
| // 按位或
^ // 按位异或
<< // 左移
>> // 右移
&^ // 按位清除赋值运算符
go
= // 赋值
+= // 加后赋值
-= // 减后赋值
*= // 乘后赋值
/= // 除后赋值
%= // 取余后赋值控制流程
if/else
go
if x > 0 {
fmt.Println("正数")
} else if x < 0 {
fmt.Println("负数")
} else {
fmt.Println("零")
}
// if 语句可以包含初始化语句
if err := doSomething(); err != nil {
fmt.Println("错误:", err)
}switch
go
// 基本用法
switch day {
case 1:
fmt.Println("星期一")
case 2:
fmt.Println("星期二")
default:
fmt.Println("其他")
}
// 多值匹配
switch day {
case 1, 2, 3, 4, 5:
fmt.Println("工作日")
case 6, 7:
fmt.Println("周末")
}
// 无表达式的 switch(类似 if-else)
switch {
case x > 0:
fmt.Println("正数")
case x < 0:
fmt.Println("负数")
default:
fmt.Println("零")
}
// 带 fallthrough
switch x {
case 1:
fmt.Println("1")
fallthrough
case 2:
fmt.Println("2")
}for 循环
go
// 基本 for 循环
for i := 0; i < 10; i++ {
fmt.Println(i)
}
// 类似 while 循环
i := 0
for i < 10 {
fmt.Println(i)
i++
}
// 无限循环
for {
// 需要 break 退出
break
}
// range 循环(遍历数组、切片、映射等)
arr := []int{1, 2, 3, 4, 5}
for index, value := range arr {
fmt.Printf("索引: %d, 值: %d\n", index, value)
}
// 只获取值
for _, value := range arr {
fmt.Println(value)
}
// 只获取索引
for index := range arr {
fmt.Println(index)
}break 和 continue
go
// break 跳出循环
for i := 0; i < 10; i++ {
if i == 5 {
break
}
fmt.Println(i)
}
// continue 跳过本次循环
for i := 0; i < 10; i++ {
if i%2 == 0 {
continue
}
fmt.Println(i)
}
// 带标签的 break 和 continue
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if j == 1 {
break outer
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
}示例程序
go
package main
import "fmt"
func main() {
// 变量声明
var name string = "Go"
age := 10
// 条件判断
if age >= 18 {
fmt.Printf("%s 已成年\n", name)
} else {
fmt.Printf("%s 未成年\n", name)
}
// 循环
for i := 1; i <= 5; i++ {
fmt.Printf("循环 %d\n", i)
}
// switch
switch age {
case 10:
fmt.Println("10岁")
case 20:
fmt.Println("20岁")
default:
fmt.Println("其他年龄")
}
}下一步
接下来我们将学习:
