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.gz

1. 配置环境变量(编辑 /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` 表示启动成功。

  1. 测试接口:

  • 访问根路径:打开浏览器输入 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 的精髓。