Go基础 第1阶段 · 第1/7课
Go语言(又称Golang)由Google的Robert Griesemer、Rob Pike和Ken Thompson于2007年设计,2009年开源。它的诞生源于对C++编译慢、Java臃肿、Python性能不足的反思。Go的设计哲学可以概括为:少即是多。
| 领域 | 代表项目 | 为什么选Go |
|---|---|---|
| 云原生基础设施 | Docker, Kubernetes, Containerd | 高并发、低资源、单二进制 |
| 微服务 | Uber, Twitch, Bilibili | goroutine处理海量连接 |
| 网络代理 | Envoy(X), Traefik, Caddy | 高性能网络I/O |
| 数据库 | CockroachDB, TiDB, InfluxDB | 内存安全+高性能 |
| 命令行工具 | hugo, terraform, gh | 快速编译、单文件分发 |
# Ubuntu/Debian
sudo apt update && sudo apt install golang-go
# macOS
brew install go
# Windows — 下载安装包:https://go.dev/dl/
# 下载最新稳定版
wget https://go.dev/dl/go1.22.2.linux-amd64.tar.gz
# 清理旧版本并安装
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.2.linux-amd64.tar.gz
# 配置PATH(写入~/.bashrc或~/.zshrc)
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin
source ~/.bashrc
$ go version
go version go1.22.2 linux/amd64
$ go env GOPATH GOROOT GOPROXY
/home/user/go
/usr/local/go
https://proxy.golang.org,direct
go env -w GOPROXY=https://goproxy.cn,direct
Go项目遵循约定大于配置的原则,标准目录结构如下:
每个Go程序都从main包的main函数开始:
package main
import "fmt"
// main函数 — 程序入口,无参数无返回值
func main() {
fmt.Println("🚀 Hello, Go!")
fmt.Println("欢迎来到Go后端开发的世界")
// 短变量声明 := (只能在函数内使用)
name := "开发者"
age := 25
version := 1.22
// fmt.Printf 格式化输出
fmt.Printf("你好,%s!你今年%d岁\n", name, age)
fmt.Printf("Go版本:%.2f\n", version)
// 常用格式化动词
fmt.Println("\n--- 格式化动词演示 ---")
fmt.Printf("布尔值: %t\n", true)
fmt.Printf("整数: %d\n", 42)
fmt.Printf("浮点数: %.2f\n", 3.14159)
fmt.Printf("字符串: %s\n", "Go语言")
fmt.Printf("类型名: %T\n", name)
fmt.Printf("十六进制: %x\n", 255)
fmt.Printf("八进制: %o\n", 8)
fmt.Printf("指针地址: %p\n", &name)
}
✅ 验证通过 — 实机编译运行结果:
🚀 Hello, Go!
欢迎来到Go后端开发的世界
你好,开发者!你今年25岁
Go版本:1.22
--- 格式化动词演示 ---
布尔值: true
整数: 42
浮点数: 3.14
字符串: Go语言
类型名: string
十六进制: ff
八进制: 10
指针地址: 0xc000014070
Go Modules是Go 1.11+引入的官方依赖管理方案,1.16后成为默认。它是现代Go项目的唯一推荐方式。
# ① 初始化新模块
mkdir myapp && cd myapp
go mod init github.com/yourname/myapp
# 生成 go.mod 文件
# ② 添加依赖(自动更新go.mod + go.sum)
go get github.com/gin-gonic/gin@latest
go get github.com/gin-gonic/gin@v1.9.1 # 指定版本
# ③ 整理依赖(添加缺失的,移除未使用的)
go mod tidy
# ④ 下载依赖到本地缓存
go mod download
# ⑤ 查看依赖树
go mod graph
# ⑥ 将依赖复制到项目vendor目录
go mod vendor
module github.com/yourname/myapp // 模块路径(全局唯一标识)
go 1.22 // 最低Go版本要求
require (
github.com/gin-gonic/gin v1.9.1 // 直接依赖
)
require (
github.com/json-iterator/go v1.1.12 // indirect 间接依赖
)
每个Go文件第一行必须声明所属包。main包 = 可执行程序,其他包名 = 可复用库。
命名规则:小写、简短、有意义。同一目录下所有文件的包名必须相同。
Go强制要求:导入的包必须使用,否则编译报错。这是Go"少废话"哲学的体现。
import (
"fmt" // 标准库 — 格式化I/O
"strings" // 标准库 — 字符串操作
"net/http" // 标准库 — HTTP客户端/服务端
"github.com/gin-gonic/gin" // 第三方包
)
func main()是程序入口,无参数无返回值。Go函数支持多返回值。
// 多返回值
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("除数不能为零")
}
return a / b, nil
}
| 命令 | 功能 | 常用示例 |
|---|---|---|
go run | 编译并立即运行 | go run main.go |
go build | 编译生成二进制文件 | go build -o app . |
go install | 编译并安装到GOPATH/bin | go install ./cmd/server |
go test | 运行测试 | go test -v -cover ./... |
go fmt | 格式化代码 | gofmt -w . |
go vet | 静态分析可疑代码 | go vet ./... |
go doc | 查看包/函数文档 | go doc fmt.Printf |
go mod init | 初始化新模块 | go mod init myapp |
go mod tidy | 整理依赖 | go mod tidy |
go get | 添加/更新依赖 | go get pkg@v1.2.3 |
go env | 查看环境变量 | go env GOPATH |
go list | 列出包信息 | go list -m all |
让我们创建一个包含自定义包的完整项目:
// ── greet/greet.go ── 自定义包
package greet
import "fmt"
// Hello 返回问候语(大写字母开头=导出/公开函数)
func Hello(name string) string {
return fmt.Sprintf("你好,%s!欢迎学习Go语言", name)
}
// Goodbye 返回告别语
func Goodbye(name string) string {
return fmt.Sprintf("再见,%s!期待下次见面", name)
}
// Version 返回版本信息
func Version() string {
return "greet v1.0.0"
}
// ── main.go ── 主程序入口
package main
import (
"fmt"
"github.com/yourname/myapp/greet"
)
func main() {
fmt.Println(greet.Version())
fmt.Println(greet.Hello("同学"))
fmt.Println(greet.Goodbye("同学"))
}
Go最强特性之一:一行命令编译任意平台:
# 编译Linux amd64
GOOS=linux GOARCH=amd64 go build -o app-linux .
# 编译Windows
GOOS=windows GOARCH=amd64 go build -o app.exe .
# 编译Mac ARM(M1/M2)
GOOS=darwin GOARCH=arm64 go build -o app-mac .
# 查看所有支持的平台
go tool dist list
编写程序,声明你的名字、年龄、城市、职业,用fmt.Printf格式化输出一张信息卡。
// 期望输出格式:
// ╔══════════════════╗
// ║ 个人信息卡 ║
// ╠══════════════════╣
// ║ 姓名:张三 ║
// ║ 年龄:25 ║
// ║ 城市:北京 ║
// ║ 职业:后端开发 ║
// ╚══════════════════╝
创建mathutils包,实现Add/Sub/Mul/Div四个函数,在main中调用并输出结果。
用GOOS和GOARCH分别编译Linux/Windows/Mac三个平台的二进制,用file命令验证。
你已经成功安装Go环境,运行了第一个程序,理解了项目结构和模块管理!
下一课将学习变量与类型——Go的静态类型系统是编译时安全的基石。