Go 语言入门指南
Go(又称为Golang)是一种开源的编程语言,由Google开发,于2009年首次公开发布。它旨在提供简洁、高效、可靠的软件开发解决方案。Golang是一种静态强类型、编译型语言,Golang具有很强的表达能力,得益于其并发机制,用它编写的程序能够非常有效地利用多核与联网的计算机,其新颖的类型系统则使程序结构变得灵活而模块化。 Go 代码编译成机器码不仅非常迅速,还具有方便的垃圾收集机制和强大的运行时反射机制。
1. 基本语法
1.1. Hello, World
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
解析:
package main:定义程序的包名,main是 Go 程序的入口包。import "fmt":引入标准库fmt,用于格式化输出。func main():主函数,程序从这里开始执行。
1.2. 变量与常量
var a int = 10 // 显式声明
b := 20 // 简短声明(只能在函数内部使用)
const Pi = 3.14159 // 常量
要点:
:=是 Go 特有的简短声明方式。- 常量使用
const声明,值在编译时确定。
1.3. 数据类型
-
基本类型:
- 整数类型:
int,int8,int16,int32,int64 - 浮点数类型:
float32,float64 - 布尔类型:
bool - 字符串:
string
- 整数类型:
-
复合类型:
- 数组:
[3]int(固定长度) - 切片:
[]int(动态长度) - 映射:
map[string]int(键值对) - 结构体:
struct
- 数组:
var arr = [3]int{1, 2, 3} // 数组
var slice = []int{4, 5, 6} // 切片
var m = map[string]int{"a": 1} // 映射
type Person struct { Name string; Age int }
1.4. 条件和循环
if a > 10 {
fmt.Println("a is greater than 10")
} else if a == 10 {
fmt.Println("a is 10")
} else {
fmt.Println("a is less than 10")
}
for i := 0; i < 5; i++ {
fmt.Println(i)
}
// Go 中没有 while,但 for 可以实现相同效果:
i := 0
for i < 5 {
fmt.Println(i)
i++
}
2. 常用特性
2.1. 函数
func add(a int, b int) int {
return a + b
}
func swap(x, y string) (string, string) {
return y, x
}
特点:
- 参数类型可以简化写法,如
(a, b int)。 - 支持多返回值。
2.2. 指针
func updateValue(val *int) {
*val = 42
}
var x = 10
updateValue(&x)
fmt.Println(x) // 输出 42
要点:
- 使用
&获取地址,*解引用。 - Go 的指针避免了直接指针运算的复杂性,提升了安全性。
2.3. 并发
Go 的并发模型基于 goroutine 和 channel。
go func() {
fmt.Println("Hello from goroutine")
}()
ch := make(chan int) // 创建一个通道
go func() {
ch <- 42 // 发送数据到通道
}()
fmt.Println(<-ch) // 接收数据
解析:
go:启动一个新的协程。- 通道(channel) :用于 goroutine 间通信。
2.4. 错误处理
Go 使用显式的错误处理机制:
func divide(a, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("cannot divide by zero")
}
return a / b, nil
}
result, err := divide(10, 2)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
3. Go 的优势
- 静态类型,快速编译:类型系统强大,但语法简单。
- 内置并发:通过 goroutine 和 channel 支持高效并发。
- 垃圾回收:开发者无需手动管理内存。
- 跨平台支持:编译后可直接运行于多种平台。