CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Go 语言入门/课时/Go 是什么
RawBlame
课时目录12 节

Go 语言入门

  1. 01Go 是什么
  2. 02基础语法与类型
  3. 03数组、切片与 map
  4. 04结构体与接口
  5. 05模块与包管理
  6. 06并发模型
  7. 07错误处理
  8. 08泛型入门
  9. 09I/O 与 CLI
  10. 10Web 与数据库
  11. 11测试与基准
  12. 12综合练习

Go 是什么

why-use-go、环境、hello world、与 Java/Node 对照。

25 分钟

Go 是什么

这一课你将能做到

  1. 说清楚 Go 解决什么问题、适合哪些场景,以及它和 Java/Node 的核心区别
  2. 完成 Go 1.22+ 环境安装,用 go version 命令验证成功
  3. 编写、运行、编译第一个 Go 程序,并逐行解释它的结构

为什么要学

Go(又名 Golang,因为官网域名是 golang.org)是 Google 在 2009 年开源的编译型语言。设计哲学很明确:在开发效率和运行性能之间取中点——写起来像 Python 一样简洁,跑起来接近 C 的速度。

Docker、Kubernetes、etcd、Prometheus、CockroachDB 全是 Go 写的;国内字节跳动、腾讯、B 站、七牛云的大量后端服务也在用 Go。如今 Go 已经是云原生领域事实上的标准语言。

三句话定位:

  • 对比 Java:Go 编译后是一个自包含的二进制文件,不依赖 JVM,拷到服务器就能跑;语法只有 25 个关键字,没有继承、没有注解、没有异常。
  • 对比 Python:静态类型 + 编译型,性能高出一到两个数量级,部署不用装解释器。
  • 对比 Node.js:goroutine 是真正的并行执行,能吃满多核,而不是单线程事件循环。

对初学者还有一个隐藏好处:语法面极小、标准库统一,能把注意力逼到「解决问题」而不是「语言特性」上。

先建立图像

package main

import "fmt"

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

终端运行:

$ go run hello.go
Hello, Go!

这个不到 10 行的文件,包含了 Go 程序的全部骨架:包声明 → 导入 → main 函数。以后写的每一个 Go 服务、每一个 CLI 工具,都是这个结构的放大版。

跟着做

步骤 1:安装 Go

  1. 打开 https://go.dev/dl/ (国内可用 https://golang.google.cn/dl/ ),下载对应操作系统的安装包,选 1.22 以上版本。
  2. Windows 双击 .msi,macOS 双击 .pkg,Linux 解压到 /usr/local 并把 /usr/local/go/bin 加入 PATH。
  3. 打开新终端验证:
$ go version
go version go1.22.5 windows/amd64

能看到版本号,安装就成功了。

步骤 2:配置国内模块代理(可选但强烈建议)

Go 下载第三方依赖默认访问国外服务器,国内经常超时。执行一次即可全局生效:

$ go env -w GOPROXY=https://goproxy.cn,direct

步骤 3:编辑器

VS Code 安装官方 Go 扩展(发布者 Go Team at Google),首次打开 .go 文件时右下角会提示安装工具链,全部同意即可。保存时自动格式化、报错即时提示,开箱即用。

步骤 4:写第一个程序

新建文件夹 hello,在其中创建 hello.go:

package main

import "fmt"

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

逐行拆解:

代码含义
package main声明本文件属于 main 包。可执行程序必须有且仅有一个 main 包
import "fmt"导入标准库 fmt(format),提供格式化输出
func main()程序入口,从这里开始执行
fmt.Println(...)打印一行并换行

步骤 5:运行与编译

$ go run hello.go     # 编译到临时目录并立刻运行,开发时用
$ go build hello.go   # 编译出可执行文件 hello.exe(Windows)或 hello(Linux/macOS)

go build 产出的文件不依赖任何运行时,直接执行即可。再试试交叉编译——在 Windows 上产出 Linux 可执行文件:

$ $env:GOOS="linux"; $env:GOARCH="amd64"; go build -o hello hello.go

生成的 hello 文件扔到任意 x86_64 Linux 服务器就能跑,这是 Go 部署体验碾压其他语言的地方。

步骤 6:体验 gofmt

Go 是少数「格式化只有一种写法」的语言。把代码故意写乱(多余空格、错误缩进),然后执行:

$ gofmt -w hello.go

所有 Go 开发者、所有项目的代码格式完全一致,代码评审永远不会为缩进和括号吵架。

讲清楚要点

  1. Go 是编译型静态语言:写错类型在编译期就报错。go run 只是「编译 + 运行」一步到位,不是解释执行。
  2. 入口是固定的:可执行程序的入口是 package main 中的 func main(),参数和返回值都不能带。
  3. 不需要写分号:词法分析器会自动在行尾插入分号,所以左大括号 { 必须和语句同行——这是语法要求,不是风格偏好。
  4. 强制统一格式:gofmt 是唯一标准,没有 Prettier 之争。
  5. 单二进制 + 交叉编译:GOOS/GOARCH 两个环境变量切换目标平台,产物零依赖。

你可能会懵的地方

  • Go 和 Golang 是一回事吗? 是。语言名叫 Go,因为 go.org 域名被占用了,官网用了 golang.org,社区才常叫 Golang。命令行工具都叫 go。

  • Go 有类和继承吗? 没有 class,没有继承。Go 用「结构体 + 方法 + 接口」组合出面向对象的能力,是「组合优于继承」的设计,第 4 课细讲。

  • GOPATH 是什么?还需要配置吗? Go 1.11 之前依赖都塞在 GOPATH 里,现在已被 go modules 取代。日常开发不需要手动配置 GOPATH,项目放任意目录都行。

  • 为什么 go run 感觉很慢? 因为它每次都在真实编译并做完整的静态检查。等程序变大后,go run 的「慢」恰恰是帮你把错误挡在运行之前。

  • 学 Go 前需要会 C 或 Java 吗? 不需要。Go 语法量小,零基础直接学完全可行;有其他语言经验的人通常一周内就能写出生产级代码。

错法对照

错法问题正解
文件第一行写 package hello 然后直接 go run缺 main 包,无法生成可执行程序入口文件必须是 package main 且含 func main()
{ 换到下一行Go 自动补分号导致语法错误左大括号必须与语句同行
手动在行尾加分号没必要,gofmt 会删掉依赖自动分号机制
把 go run 理解成解释执行误解运行模型go run = 编译到临时目录 + 运行
照着老教程用 GOPATH 建项目已过时用 go modules:go mod init

卡点急救

  1. go 命令找不到:安装后重开终端;仍不行就把 C:\Program Files\Go\bin(或 /usr/local/go/bin)手动加入 PATH。
  2. go get/go mod download 超时:执行 go env -w GOPROXY=https://goproxy.cn,direct 换国内代理。
  3. 编译出的 exe 被杀毒软件删除:把项目目录加入白名单,或用 go build -o app.exe 指定输出名。

面试常问

  • Go 的主要特点?为什么选 Go? 编译型静态语言;语法极简(25 个关键字);原生 goroutine 并发,轻量到单机可开百万级;编译快、产物是零依赖单二进制;标准库覆盖网络/加密/测试,部署运维成本低。适用场景:高并发后端服务、云原生基础设施、CLI 工具。

  • Go 和 Java 的核心区别? 无 JVM,编译为原生机器码;无继承无异常,用组合和 error 值;goroutine 协程模型对比线程模型;部署方式完全不同(单文件对比 fat jar + 运行时)。

  • goroutine 是什么?(概念级) Go 运行时调度的轻量级「用户态线程」,初始栈约 2KB,创建/切换成本远低于操作系统线程,是 Go 高并发的基石,第 6 课展开。

自测三问

  1. Go 程序的入口函数必须满足哪两个条件?
  2. go run 和 go build 分别适合什么场景?
  3. 如何把程序交叉编译成 Linux 可执行文件?

小结一句话

Go 用极简语法 + 编译期安全 + 原生并发 + 零依赖部署,拿下后端与云原生开发的最高性价比;环境装好、hello world 跑通,你就有了继续的一切。

延伸

  • A Tour of Go(官方交互教程,浏览器里直接写 Go)
  • Go 标准库文档索引
  • 下一课:基础语法与类型——变量、零值、常量、iota 与控制流,把地基打实。
加载本节练习…
下一课 →基础语法与类型