Go 语言基础语法详解
Go(Golang)是一种静态类型、编译型的编程语言,以简洁、高效和并发支持著称。本篇内容将系统讲解 Go 语言的基础语法,包括变量、数据类型、流程控制、函数、指针、结构体、接口等。
1. Go 语言基本结构
Go 程序的基本结构如下:
package main // 声明当前包,Go 程序的入口必须是 main 包
import "fmt" // 导入 fmt 包(用于输入输出)
func main() { // 主函数,程序入口
fmt.Println("Hello, Go!") // 输出内容
}
- package main:定义一个可执行程序的主包。
- import “fmt”:导入
fmt包,用于标准输入输出。 - func main():程序的主入口。
2. 变量与常量
(1)变量的声明
Go 语言的变量必须先声明后使用,可以使用 var 关键字:
var name string = "Go"
var age int = 10
var pi float64 = 3.1415
Go 也支持类型推导:
var country = "China" // 自动推导为 string 类型
简短声明(只能在函数内使用):
language := "Go" // 自动推导类型
(2)多变量声明
var a, b, c int = 1, 2, 3
x, y := "hello", 100
(3)常量
常量使用 const 关键字:
const PI = 3.14
const (
StatusOK = 200
StatusNotFound = 404
)
3. 数据类型
Go 语言数据类型分为:
- 基本类型:
int、float32、float64、bool、string - 复合类型:
array、slice、map、struct、pointer、interface、channel
(1)整型
var a int8 = 127
var b uint32 = 12345
var c int = 100 // 根据系统自动推导 32 或 64 位
(2)浮点型
var pi float64 = 3.14159
(3)布尔型
var isGo bool = true
(4)字符串
var msg string = "Hello, Go!"
fmt.Println(len(msg)) // 计算字符串长度
多行字符串:
msg := `This is
a multi-line string`
4. 运算符
Go 支持的运算符:
- 算术运算符:
+-*/% - 比较运算符:
==!=><>=<= - 逻辑运算符:
&&||! - 位运算符:
&|^<<>> - 赋值运算符:
=+=-=*=/=
5. 流程控制
(1)if 语句
if age > 18 {
fmt.Println("Adult")
} else {
fmt.Println("Minor")
}
支持在 if 语句中声明变量:
if num := 10; num > 5 {
fmt.Println("Greater than 5")
}
(2)switch 语句
switch day := 3; day {
case 1:
fmt.Println("Monday")
case 2:
fmt.Println("Tuesday")
default:
fmt.Println("Other day")
}
(3)for 循环
Go 只有 for 一种循环结构:
for i := 0; i < 5; i++ {
fmt.Println(i)
}
等价于:
i := 0
for i < 5 {
fmt.Println(i)
i++
}
6. 数组与切片
(1)数组
var arr [3]int = [3]int{1, 2, 3}
fmt.Println(arr[0]) // 访问数组元素
(2)切片(Slice)
nums := []int{1, 2, 3, 4}
fmt.Println(nums[:2]) // [1, 2]
使用 append 添加元素:
nums = append(nums, 5)
7. Map(字典)
scores := map[string]int{"Alice": 90, "Bob": 85}
fmt.Println(scores["Alice"])
添加/修改:
scores["Tom"] = 88
遍历:
for k, v := range scores {
fmt.Println(k, v)
}
8. 函数
(1)基本函数
func add(a int, b int) int {
return a + b
}
(2)多返回值
func swap(a, b int) (int, int) {
return b, a
}
(3)可变参数
func sum(nums ...int) int {
total := 0
for _, num := range nums {
total += num
}
return total
}
9. 指针
var p *int
num := 100
p = &num
fmt.Println(*p) // 100
10. 结构体
type Person struct {
Name string
Age int
}
p := Person{"Alice", 25}
fmt.Println(p.Name)
11. 接口
type Speaker interface {
Speak()
}
type Dog struct{}
func (d Dog) Speak() {
fmt.Println("Woof!")
}
var s Speaker = Dog{}
s.Speak()
12. 并发(Goroutines & Channels)
(1)Goroutines
go func() {
fmt.Println("Hello from Goroutine!")
}()
(2)Channel
ch := make(chan int)
go func() {
ch <- 10
}()
fmt.Println(<-ch) // 10
13. 参考资料
- 官方文档:Go 官方文档
- Go Playground 在线测试:Go Playground