Skip to content

第01章 Go 入门篇 —— 从认识 Go 到跑通第一个程序

本章目标:理解 Go 是什么、为什么火、安装好开发环境、写出并运行你的第一个 Go 程序。


1. Go 到底是什么?

用一句话描述:Go(也叫 Golang)是 Google 在 2009 年开源的一门编译型、静态类型、原生支持并发的编程语言。

🌰 生活化比喻

把编程语言比作做菜的工具

工具编程语言特点
微波炉Python加热快、操作简单,但火力有限(性能)
燃气灶Java火力足、功能多,但点火慢(启动慢、JVM)
现代电磁灶Go点火即开(启动快)、火力够(高性能)、自带定时(并发)、操作简单(语法少)
柴火灶C/C++火力最猛、但要劈柴生火(手动管理内存)

Go 想做的事:把 Python 的开发效率 + C 的运行性能 + Java 的工程化能力集成到一起。

Go 的设计哲学(记住三句话)

  1. 少即是多(Less is More):关键字只有 25 个,没有继承、没有泛型(1.18 前)、没有异常
  2. 大道至简:写代码就一种推荐写法,团队协作几乎不会因为风格吵架
  3. 天生云原生:Docker、Kubernetes、etcd、Prometheus 都是 Go 写的

2. 为什么应该学 Go?

2.1 业界使用情况

后端服务器:腾讯、字节、滴滴、B 站大量用 Go 重写老服务
云原生:K8s、Docker、Istio、Terraform 全是 Go
区块链:以太坊客户端、Hyperledger Fabric
中间件:etcd、Consul、TiDB、Caddy

2.2 Go 的核心卖点

💪 编译快         编译速度比 C++ 快 10 倍以上
💪 性能强         接近 C,远超 Python/Node.js  
💪 并发牛         goroutine 比线程轻量 1000 倍
💪 部署易         单文件二进制,没有依赖
💪 标准库全       自带 HTTP 服务器、JSON、加密、模板

📊 配套图解:diagrams/go-positioning.svg —— Go 在编程语言中的定位


3. 安装 Go 环境

3.1 下载安装包

打开官网 https://go.dev/dl/,选择对应系统的安装包:

  • Windows:下载 go1.22.x.windows-amd64.msi,双击下一步即可
  • macOS:下载 go1.22.x.darwin-arm64.pkg(M 系列芯片)或 amd64.pkg(Intel)
  • Linux:下载 go1.22.x.linux-amd64.tar.gz,解压到 /usr/local

3.2 验证安装

打开终端(Windows 用 PowerShell):

bash
go version
# 输出示例:go version go1.22.0 darwin/arm64

看到版本号就说明装好了 🎉

3.3 关键环境变量(理解一遍即可)

变量作用默认值
GOROOTGo 安装目录/usr/local/go
GOPATH工作目录(老版本概念)~/go
GOPROXY模块代理https://proxy.golang.org
GO111MODULE是否启用 Moduleon(默认)

💡 国内同学务必设置代理,否则下载第三方包会龟速:

bash
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOSUMDB=off

📊 配套图解:diagrams/go-workflow.svg —— Go 工程从源码到运行的全过程


4. 你的第一个 Go 程序

4.1 经典 Hello World

新建文件 hello.go

go
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

运行:

bash
go run hello.go
# 输出:Hello, World!

4.2 这 5 行代码到底在干什么?

┌─────────────────────────────────────┐
│ package main          ← 我属于 main 包(程序入口包)│
│ import "fmt"          ← 借用别人写好的 fmt 工具箱   │
│ func main() {         ← 这是程序的"大门"           │
│   fmt.Println(...)    ← 调用 fmt 里的 Println 打印 │
│ }                                                  │
└─────────────────────────────────────┘

🌰 用快递公司类比

  • package main = 这家快递公司叫 main
  • import "fmt" = 我借用顺丰公司(fmt)的运输能力
  • func main() = 这家公司的总经理办公室,上班第一件事
  • fmt.Println = 顺丰公司里有个员工叫 Println,专门负责"打印输出"

📊 配套图解:diagrams/hello-world-anatomy.svg —— 一个 Go 程序的解剖图

4.3 编译为可执行文件

bash
go build hello.go
# 当前目录会出现 hello(macOS/Linux)或 hello.exe(Windows)

./hello
# 输出:Hello, World!

go build 把源码编译成单个二进制文件,可以直接拷贝到任何同架构的机器上运行,不需要装 Go 环境。这就是 Go 部署友好的原因。

4.4 go run vs go build

命令作用场景
go run编译 + 立即运行(不留产物)开发调试
go build只编译,生成可执行文件发布部署
go install编译 + 把产物放到 $GOPATH/bin全局命令

5. 一个稍微有意思一点的程序

试试看下面这个 greeting.go

go
package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

func main() {
    fmt.Print("请输入你的名字:")
    reader := bufio.NewReader(os.Stdin)
    name, _ := reader.ReadString('\n')
    name = strings.TrimSpace(name)
    fmt.Printf("Hello, %s!欢迎来到 Go 的世界 🚀\n", name)
}

运行后它会等你输入名字,然后跟你打招呼。这里能看到 Go 的几个特色:

  1. import 可以一次导入多个包(用括号包起来)
  2. 多返回值:reader.ReadString 返回两个值——读到的字符串和错误
  3. _ 表示忽略某个返回值(这里我们暂时不处理错误)
  4. fmt.Printf%s 是 C 风格的格式化输出

6. Go 工程目录长什么样?

一个标准 Go 项目大概是这样:

my-project/
├── go.mod              # 模块定义文件(类似 package.json)
├── go.sum              # 依赖校验文件
├── main.go             # 程序入口
├── internal/           # 仅本项目可用的私有代码
│   └── service/
├── pkg/                # 可被外部项目引用的代码
├── cmd/                # 多个可执行入口
│   └── server/
├── api/                # API 定义(proto 文件等)
├── configs/            # 配置文件
└── README.md

别急,第10章会专门讲 Module 和工程组织。现在你只需要知道一个 .go 文件就能跑起来就够了。

📊 配套图解:diagrams/project-structure.svg —— Go 标准项目目录


7. 编辑器推荐

编辑器推荐度配置
VSCode + Go 插件⭐⭐⭐⭐⭐golang.go 一键搞定
GoLand⭐⭐⭐⭐⭐收费,但是 JetBrains 全家桶用户的福音
Vim/Neovim + LSP⭐⭐⭐⭐极客向
Sublime + LSP⭐⭐⭐轻量但要自己折腾

VSCode 装好后第一次打开 .go 文件,它会问你要不要装 goplsdlv 等工具,全部点 Install 就行。


8. 本章小结

✅ Go 是 Google 出品的、追求"简单+高性能+并发友好"的现代语言
✅ 适合写后端服务、云原生中间件、CLI 工具
✅ 一个 .go 文件 + package main + func main() 就能跑起来
go run 用于开发,go build 用于发布
✅ 国内务必设置 GOPROXY=https://goproxy.cn,direct

下一章我们来学变量、常量与基本数据类型——程序的"原材料"。


📂 配套资源