Skip to content

基础语法

变量和常量

变量声明

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("其他年龄")
    }
}

下一步

接下来我们将学习:

基于 VitePress 构建