Go 语言入门教程:从环境搭建到实战 HTTP 服务器
Go 语言入门教程:从环境搭建到实战 HTTP 服务器
Go(又称 Golang)是 Google 开发的静态强类型、编译型编程语言,以**简洁高效、并发友好、跨平台**为核心优势,广泛应用于后端服务、云原生开发、区块链等领域。本文将带大家从 0 开始,掌握 Go 语言基础操作与实战技巧。
一、环境搭建:3 步完成 Go 安装
1. 下载 Go 安装包
访问[Go 官方下载页],根据操作系统选择对应安装包:
Windows:下载
.msi安装包(如go1.22.0.windows-amd64.msi)macOS:下载
.pkg安装包(如go1.22.0.darwin-amd64.pkg)Linux:下载
.tar.gz压缩包(如go1.22.0.linux-amd64.tar.gz)
2. 安装步骤(分系统)
Windows 系统
1. 双击下载的 .msi 文件,点击「Next」
2. 勾选「I accept the license agreement」,点击「Next」
3. 选择安装路径(默认 C:\Go,建议保持默认),点击「Next」
4. 点击「Install」,等待安装完成后点击「Finish」
macOS 系统
1. 双击 .pkg 文件,按照引导点击「继续」
2. 同意许可协议,选择安装位置(默认 /usr/local/go)
3. 输入系统密码验证,完成安装
Linux 系统
1. 打开终端,执行命令解压安装包到 /usr/local:
sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz1. 配置环境变量(编辑 /etc/profile 或 ~/.bashrc):
echo "export PATH=\$PATH:/usr/local/go/bin" >> \~/.bashrc
source \~/.bashrc # 生效配置3. 验证安装成功
打开终端(Windows 用 PowerShell/CMD),执行以下命令:
go version若输出类似 go version go1.22.0 windows/amd64 的信息,说明安装成功!
二、Go 基础语法:5 个核心知识点
1. 第一个 Go 程序:Hello World
步骤 1:创建项目目录
任意位置新建文件夹(如
go-demo),作为项目根目录。
步骤 2:编写代码
在项目根目录创建
main.go文件,输入以下代码:
// main.go:Go程序入口文件
package main // 声明包名,main包是可执行程序的入口
import "fmt" // 导入标准库的fmt包,用于输入输出
// main函数:程序执行的入口点(必须在main包中)
func main() {
// 调用fmt包的Println函数,打印内容到控制台
fmt.Println("Hello, Go!")
}步骤 3:运行程序
在项目根目录打开终端,执行以下命令:
go run main.go终端会输出 Hello, Go!,表示程序运行成功!
2. 变量与数据类型
Go 是静态类型语言,变量声明时需指定类型(或通过编译器自动推导)。
变量声明的 3 种方式
import "fmt"
func main() {
// 1. 完整声明:var 变量名 类型 = 值
var age int = 25
// 2. 类型推导:省略类型,编译器自动判断
var name = "Go开发者"
// 3. 短声明:仅用于函数内,:= 自动推导类型
score := 95.5
// 打印变量(%d整数,%s字符串,%f浮点数)
fmt.Printf("年龄:%d,姓名:%s,分数:%f\n", age, name, score)
}常用数据类型
基本类型:int(整数)、float64(浮点数)、bool(布尔值)、string(字符串)
复合类型:切片(slice)、映射(map)、结构体(struct)(后续实战会用到)
3. 流程控制:if-else 与 for 循环
if-else(无需括号包裹条件)
func main() {
score := 85
if score >= 90 {
fmt.Println("优秀")
} else if score >= 70 {
fmt.Println("良好")
} else {
fmt.Println("加油")
}
}for 循环(Go 没有 while,用 for 替代)
func main() {
// 1. 普通循环:初始化;条件;递增
for i := 0; i < 5; i++ {
fmt.Printf("循环次数:%d\n", i)
}
// 2. 替代while:仅保留条件
num := 3
for num > 0 {
fmt.Println(num)
num--
}
// 3. 无限循环(需手动break退出)
// for {
// fmt.Println("无限循环")
// break // 退出循环
// }
}4. 函数:定义与调用
Go 函数支持多返回值,这在处理错误时非常实用。
package main
import "fmt"
// 定义函数:func 函数名(参数名 类型) (返回值类型) { ... }
// 此处函数返回两个值:计算结果和错误信息
func add(a int, b int) (int, error) {
if a < 0 || b < 0 {
// 返回错误(errors.New需导入"errors"包)
return 0, fmt.Errorf("参数不能为负数")
}
return a + b, nil // 正常返回结果和nil(无错误)
}
func main() {
// 调用函数,接收两个返回值
result, err := add(10, 20)
if err != nil {
fmt.Println("错误:", err)
return
}
fmt.Println("10+20=", result) // 输出:10+20= 30
}5. 切片(Slice):动态数组
切片是 Go 中最常用的集合类型,长度可动态变化。
func main() {
// 1. 创建切片:make(类型, 长度, 容量)
nums := make(\[]int, 3, 5) // 长度3,容量5(容量是底层数组大小)
nums\[0] = 1
nums\[1] = 2
// 2. 追加元素(切片容量不足时会自动扩容)
nums = append(nums, 3, 4)
// 3. 遍历切片(range返回索引和值)
fmt.Println("切片内容:")
for index, value := range nums {
fmt.Printf("索引%d:%d\n", index, value)
}
}
三、实战:搭建一个简单 HTTP 服务器
Go 标准库自
net/http包,无需第三方依赖即可快速搭建 HTTP 服务。
1. 编写服务代码
创建 server.go 文件,代码如下:
package main
import (
"fmt"
"net/http"
)
// 1. 定义处理器函数:处理HTTP请求
// w:用于写入响应;r:存储请求信息
func helloHandler(w http.ResponseWriter, r \*http.Request) {
// 只处理GET方法
if r.Method != http.MethodGet {
http.Error(w, "方法不允许", http.StatusMethodNotAllowed)
return
}
// 向响应写入内容
fmt.Fprintf(w, "Hello, Go HTTP Server!")
}
// 2. 定义带参数的处理器(如 /user?name=xxx)
func userHandler(w http.ResponseWriter, r \*http.Request) {
// 获取URL参数中的name值
name := r.URL.Query().Get("name")
if name == "" {
http.Error(w, "请传入name参数(如 /user?name=Go)", http.StatusBadRequest)
return
}
fmt.Fprintf(w, "Hello, %s!", name)
}
func main() {
// 3. 注册路由:将URL路径与处理器函数绑定
http.HandleFunc("/", helloHandler) // 根路径 /
http.HandleFunc("/user", userHandler) // /user 路径
// 4. 启动服务器:监听8080端口
fmt.Println("服务器启动成功,访问 http://localhost:8080")
// 若启动失败(如端口被占用),返回错误
err := http.ListenAndServe(":8080", nil)
if err != nil {
fmt.Printf("服务器启动失败:%v\n", err)
}
}2. 运行与测试服务
1. 启动服务器:
go run server.go终端输出 `服务器启动成功,访问 ``http://localhost:8080` 表示启动成功。
测试接口:
访问根路径:打开浏览器输入
http://localhost:8080,页面显示Hello, Go HTTP Server!访问带参数路径:输入 `http://localhost:8080/user?name=``张
,页面显示Hello, 张三!`
四、进阶学习方向
1. 依赖管理:学习 go mod 工具(如 go mod initgo get),管理项目第三方依赖(例如 Web 框架 Gin、ORM 工具 GORM)。
2. 并发编程:深入理解 Go 的核心特性 —— 协程(Goroutine)与通道(Channel),实现高效并发任务。
3. 项目部署:将 Go 程序编译为二进制文件,通过 systemd 或 Docker 部署到服务器(可参考我之前的 Go 部署教程)。
总结
Go 语言以其简洁的语法和强大的标准库,降低了后端开发的门槛。本文从环境搭建到实战 HTTP 服务,覆盖了初学者必备的核心知识点。建议大家多写代码练习(比如扩展 HTTP 服务,增加数据库连接功能),逐步掌握 Go 的精髓。