Go语言基础语法快速入门
Go(又称 Golang)是 Google 开发的一种静态强类型、编译型语言。它以简洁的语法、高效的并发模型(Goroutines)和强大的标准库而闻名。
1. 第一个程序:Hello World
每一个 Go 文件都必须以 package 声明开头。main 包是程序的入口包。
package main
import "fmt" // 导入格式化包,用于输出
func main() {
fmt.Println("Hello, Go!")
}
- 运行:
go run main.go - 编译:
go build main.go
2. 变量与常量
Go 支持显式声明和类型推导。
变量声明
var name string = "Golang" // 显式类型声明
var version = 1.21 // 自动类型推导
count := 10 // 短变量声明(仅限函数内部使用)
常量
使用 const 关键字,值在编译时确定且不可更改。
const Pi = 3.14159
3. 基本数据类型
| 类型 | 说明 | 示例 |
|---|---|---|
bool |
布尔值 | true, false |
int/uint |
整数(根据平台 32/64 位) | 100, -1 |
float64 |
浮点数 | 3.14 |
string |
字符串(UTF-8 编码) | "你好" |
error |
接口类型,用于处理错误 | nil |
4. 控制结构
条件判断 (If-Else)
Go 的 if 不需要圆括号,且支持在条件判断前执行初始化语句。
if score := 85; score >= 60 {
fmt.Println("合格")
} else {
fmt.Println("不合格")
}
循环 (For)
Go 只有一种循环关键字:for。它可以实现传统的 C 风格循环、While 循环和迭代。
// 传统风格
for i := 0; i < 5; i++ {
fmt.Println(i)
}
// 模拟 While
for n < 10 {
n++
}
// 死循环
for {
break
}
5. 复合类型
切片 (Slice)
切片是 Go 中最常用的数据结构,它是对数组的抽象,长度可变。
nums := []int{1, 2, 3}
nums = append(nums, 4) // 添加元素
sub := nums[1:3] // 切片截取(左闭右开)
fmt.Println(len(nums), cap(nums)) // 长度与容量
映射 (Map)
无序的键值对集合(哈希表)。
m := make(map[string]int)
m["Go"] = 2009
delete(m, "Go") // 删除键
6. 函数 (Functions)
Go 函数支持多个返回值,通常用于返回结果和错误信息。
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, fmt.Errorf("除数不能为 0")
}
return a / b, nil
}
7. 结构体与方法 (Structs & Methods)
Go 没有"类",而是通过 struct 定义数据,通过为结构体绑定 method 来定义行为。
定义结构体
type User struct {
ID int
Name string
}
定义方法
// (u User) 是接收者,类似于 self 或 this
func (u User) SayHi() {
fmt.Printf("大家好,我是 %s\n", u.Name)
}
8. 指针 (Pointers)
Go 允许使用指针,但不支持指针运算(如 p++),这保证了内存安全。
&:获取变量地址*:获取地址指向的值
x := 1
p := &x // p 是指向 x 的指针
fmt.Println(*p) // 输出 1
9. 错误处理
Go 提倡显式处理错误,而不是抛出异常(try-catch)。
res, err := divide(10, 0)
if err != nil {
fmt.Println("发生错误:", err)
return
}
fmt.Println("结果:", res)
总结
Go 的语法设计极其克制,去掉了复杂的特性,专注于代码的可读性和可维护性。