Go 语言,也被称为 Golang,是由 Google 开发的一种静态类型、编译型语言。自 2009 年发布以来,Go 以其简洁的语法、高效的并发支持和强大的标准库而受到广泛欢迎。
1. Go 语言简介
Go 语言的设计目标是提供一种简单、高效且易于维护的语言。它借鉴了 C 语言的语法,同时引入了许多现代编程语言的特性,如垃圾回收、接口、包管理等。Go 语言特别适合于网络编程、系统编程和分布式系统开发。
1.1 安装 Go
首先,你需要安装 Go 语言环境。你可以从 Go 官方网站 下载适合你操作系统的安装包。安装完成后,设置好 GOPATH
和 GOROOT
环境变量,确保你的开发环境已经准备好。
1.2 第一个 Go 程序
让我们从经典的 "Hello, World!" 程序开始:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
保存为 hello.go
,然后在终端中运行 go run hello.go
,你应该会看到输出 Hello, World!
。
2. 基础语法
2.1 变量声明与赋值
Go 语言中的变量声明非常直观。你可以使用 var
关键字来声明变量,也可以使用简短声明方式 :=
来声明并初始化变量。
var a int = 10
b := 20
2.2 数据类型
Go 语言支持多种数据类型,包括基本类型(如整型、浮点型、布尔型)和复合类型(如数组、切片、映射)。
- 整型:
int
,int8
,int16
,int32
,int64
- 无符号整型:
uint
,uint8
,uint16
,uint32
,uint64
- 浮点型:
float32
,float64
- 复数:
complex64
,complex128
- 布尔型:
bool
- 字符串:
string
- 数组:
[n]T
- 切片:
[]T
- 映射:
map[K]V
- 结构体:
struct
2.3 控制结构
Go 语言提供了常见的控制结构,如 if-else
、for
循环和 switch
语句。
if-else 语句
a := 10
if a > 5 {
fmt.Println("a is greater than 5")
} else {
fmt.Println("a is less than or equal to 5")
}
for 循环
for i := 0; i < 10; i++ {
fmt.Println(i)
}
switch 语句
day := 3
switch day {
case 1:
fmt.Println("Monday")
case 2:
fmt.Println("Tuesday")
case 3:
fmt.Println("Wednesday")
default:
fmt.Println("Other day")
}
2.4 函数
函数是 Go 语言中的基本构建块。你可以定义函数并调用它们。
func add(a int, b int) int {
return a + b
}
func main() {
result := add(10, 20)
fmt.Println(result)
}
3. 面向对象编程
虽然 Go 语言不支持传统的面向对象编程(OOP),但它通过结构体和接口提供了类似的功能。
3.1 结构体
结构体是一种用户定义的类型,可以包含多个字段。
type Person struct {
Name string
Age int
}
func main() {
p := Person{Name: "Alice", Age: 30}
fmt.Println(p.Name, p.Age)
}
3.2 方法
你可以为结构体定义方法。
type Person struct {
Name string
Age int
}
func (p Person) Greet() string {
return "Hello, my name is " + p.Name
}
func main() {
p := Person{Name: "Alice", Age: 30}
fmt.Println(p.Greet())
}
3.3 接口
接口定义了一组方法签名,任何实现了这些方法的类型都满足该接口。
type Greeter interface {
Greet() string
}
type Person struct {
Name string
}
func (p Person) Greet() string {
return "Hello, my name is " + p.Name
}
func main() {
var g Greeter
g = Person{Name: "Alice"}
fmt.Println(g.Greet())
}
4. 并发编程
Go 语言通过 goroutines 和 channels 提供了强大的并发支持。
4.1 Goroutines
Goroutines 是轻量级的线程,可以轻松创建和管理。
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
4.2 Channels
Channels 用于在不同的 goroutines 之间传递消息。
package main
import (
"fmt"
"time"
)
func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
fmt.Println("worker", id, "started job", j)
time.Sleep(time.Second)
fmt.Println("worker", id, "finished job", j)
results <- j * 2
}
}
func main() {
numJobs := 5
jobs := make(chan int, numJobs)
results := make(chan int, numJobs)
for w := 1; w <= 3; w++ {
go worker(w, jobs, results)
}
for j := 1; j <= numJobs; j++ {
jobs <- j
}
close(jobs)
for a := 1; a <= numJobs; a++ {
<-results
}
}
5. 标准库
Go 语言拥有丰富的标准库,涵盖了网络编程、文件 I/O、加密、测试等多个领域。以下是一些常用的包:
- fmt:格式化 I/O。
- net/http:HTTP 客户端和服务器。
- os:操作系统相关的功能。
- io:I/O 操作。
- sync:同步原语,如互斥锁和条件变量。
- testing:测试框架。