Golang 语法详解:掌握 Go 语言的核心语法

# Golang 语法详解:掌握 Go 语言的核心语法

## 标识符和关键字

### 标识符

标识符是用来命名变量、函数、类型等的名称,必须以字母或下划线开头,后跟任意数量的字母、数字或下划线。

### 关键字

Go 语言有 25 个关键字:

“`
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
“`

## 变量声明与初始化

### 变量声明

“`go
// 标准声明
var name string
var age int

// 批量声明
var (
name string
age int
)

// 声明并初始化
var name string = “Go”
var age int = 10

// 类型推断
var name = “Go”
var age = 10

// 简短声明(只能在函数内部使用)
name := “Go”
age := 10
“`

### 零值

当变量声明后未初始化时,会被赋予零值:

– 数值类型:0
– 布尔类型:false
– 字符串:””
– 指针:nil
– 切片:nil
– 映射:nil
– 通道:nil
– 函数:nil

## 常量

### 常量声明

“`go
// 单个常量
const Pi = 3.14159

// 批量声明
const (
StatusOK = 200
StatusError = 500
)

// iota 常量生成器
const (
A = iota // 0
B // 1
C // 2
)
“`

## 数据类型

### 基本类型

#### 布尔型

“`go
var b bool = true
“`

#### 数值型

– 整数类型:`int`, `int8`, `int16`, `int32`, `int64`, `uint`, `uint8`, `uint16`, `uint32`, `uint64`, `uintptr`
– 浮点类型:`float32`, `float64`
– 复数类型:`complex64`, `complex128`

“`go
var i int = 10
var f float64 = 3.14
var c complex128 = 1 + 2i
“`

#### 字符串

“`go
var s string = “Hello, Go!”
// 字符串拼接
s = s + ” World”
// 多行字符串
s = `
Hello
Go
`
“`

### 复合类型

#### 数组

“`go
// 声明数组
var arr [5]int
// 初始化数组
arr = [5]int{1, 2, 3, 4, 5}
// 自动推断长度
arr = […]int{1, 2, 3, 4, 5}
“`

#### 切片

“`go
// 声明切片
var slice []int
// 从数组创建切片
slice = arr[1:4] // 包含索引 1,不包含索引 4
// 使用 make 创建切片
slice = make([]int, 5) // 长度为 5,容量为 5
slice = make([]int, 5, 10) // 长度为 5,容量为 10
// 直接初始化切片
slice = []int{1, 2, 3, 4, 5}
“`

#### 切片操作

“`go
// 添加元素
slice = append(slice, 6)
// 添加另一个切片
slice = append(slice, []int{7, 8, 9}…)
// 复制切片
copy(dest, src)
“`

## 控制流

### 条件语句

“`go
if x > 0 {
fmt.Println(“x is positive”)
} else if x < 0 { fmt.Println("x is negative") } else { fmt.Println("x is zero") } // if 语句可以包含初始化语句 if y := 10; y > 0 {
fmt.Println(“y is positive”)
}
“`

### 循环语句

“`go
// for 循环
for i := 0; i < 10; i++ { fmt.Println(i) } // while 循环 for i < 10 { fmt.Println(i) i++ } // 无限循环 for { fmt.Println("infinite loop") break } // 遍历数组、切片、映射 for index, value := range slice { fmt.Println(index, value) } ``` ### switch 语句 ```go switch x { case 1: fmt.Println("x is 1") case 2: fmt.Println("x is 2") default: fmt.Println("x is other") } // switch 语句可以包含初始化语句 switch y := 10; y { case 1: fmt.Println("y is 1") case 10: fmt.Println("y is 10") default: fmt.Println("y is other") } // 无表达式 switch switch { case x > 0:
fmt.Println(“x is positive”)
case x < 0: fmt.Println("x is negative") default: fmt.Println("x is zero") } ``` ## 函数 ### 函数定义 ```go // 基本函数定义 func add(a, b int) int { return a + b } // 多个返回值 func swap(a, b string) (string, string) { return b, a } // 命名返回值 func divide(a, b float64) (result float64, err error) { if b == 0 { err = errors.New("division by zero") return } result = a / b return } // 可变参数 func sum(nums ...int) int { total := 0 for _, num := range nums { total += num } return total } ``` ### 函数作为参数和返回值 ```go // 函数类型 type Operation func(int, int) int // 函数作为参数 func calculate(a, b int, op Operation) int { return op(a, b) } // 函数作为返回值 func getOperation(operation string) Operation { switch operation { case "add": return func(a, b int) int { return a + b } case "subtract": return func(a, b int) int { return a - b } default: return func(a, b int) int { return 0 } } } ``` ## 结构体和方法 ### 结构体定义 ```go type Person struct { Name string Age int Address string } ``` ### 结构体方法 ```go // 值接收者方法 func (p Person) GetName() string { return p.Name } // 指针接收者方法 func (p *Person) SetAge(age int) { p.Age = age } ``` ## 接口 ### 接口定义 ```go type Animal interface { Speak() string Move() string } ``` ### 接口实现 ```go type Dog struct { Name string } func (d Dog) Speak() string { return "Woof!" } func (d Dog) Move() string { return "Run" } type Cat struct { Name string } func (c Cat) Speak() string { return "Meow!" } func (c Cat) Move() string { return "Walk" } ``` ## 错误处理 ### 错误返回 ```go func divide(a, b float64) (float64, error) { if b == 0 { return 0, errors.New("division by zero") } return a / b, nil } // 使用错误 result, err := divide(10, 0) if err != nil { fmt.Println("Error:", err) return } fmt.Println("Result:", result) ``` ## 包管理 ### 包声明 ```go package main ``` ### 导入包 ```go import ( "fmt" "math" "errors" ) // 导入别名 import ( f "fmt" m "math" ) // 导入空白标识符 import ( _ "github.com/go-sql-driver/mysql" ) ``` ## 总结 本文详细介绍了 Go 语言的核心语法,包括标识符和关键字、变量声明与初始化、常量、数据类型、控制流、函数、结构体和方法、接口以及错误处理等内容。掌握这些语法知识是学习 Go 语言的基础,也是编写高质量 Go 代码的前提。在实际开发中,我们需要灵活运用这些语法特性,结合具体场景编写清晰、高效的代码。

Scroll to Top