404 Not Found

404 Not Found


nginx

Go 简介

就像学开车要先认识方向盘和油门,学Go也要先搞清楚它是什么、能干什么、为什么值得学。


1. Go 是什么

Go(又称 Golang)是 Google 在 2009 年发布的开源编程语言,由 Robert Griesemer、Rob Pike 和 Ken Thompson 三位大神设计。它的核心目标是:让程序员写得快、编译快、运行快

Go 的定位很明确——它是一门系统级语言的语法,脚本语言的开发效率。你用它写网络服务、微服务、命令行工具,体验接近 Python 的简洁,但性能接近 C/C++。

Go 的设计哲学

Go 的设计哲学可以用三个词概括:

哲学 含义 体现
简洁 语法极简,关键字只有25个 没有继承、没有泛型(1.18+才加)、没有异常(用error返回)
并发 原生支持并发编程 goroutine + channel,写并发代码像写普通代码一样简单
快速 编译速度快,运行速度快 编译成机器码,部署只需一个二进制文件
💡 简单理解: 如果 Python 是"简洁但慢",C++ 是"快但复杂",Go 就是"又简洁又快"。它在两者之间找到了一个很好的平衡点。


2. 为什么学 Go

行业趋势

Go 在过去几年增长迅猛,已经成为云原生时代的首选语言:

领域 代表项目 说明
容器与编排 Docker、Kubernetes 容器技术的两大基石都是Go写的
微服务 Go Micro、Go Kit、gRPC-Go 微服务框架生态成熟
数据库 TiKV、CockroachDB、InfluxDB 高性能分布式数据库
Web框架 Gin、Echo、Fiber 轻量级高性能Web框架
DevOps工具 Terraform、Prometheus、etcd 云原生运维工具链
区块链 Ethereum (Geth)、Cosmos 主流区块链节点实现

薪资与市场

指标 数据
TIOBE 排名 稳定前10
Stack Overflow 薪资 全球Top 5高薪语言
国内需求 字节跳动、腾讯、B站、七牛云等大量使用
增长趋势 连续多年增长率超过 15%
💡 学Go的理由: 如果你想进入云原生、微服务、高性能后端领域,Go 几乎是必学语言。它的学习曲线比 C++ 平缓得多,但能力远超 Python。


3. Go 能做什么

主要应用领域

Go 不擅长的领域

领域 原因
GUI桌面应用 生态不成熟,不如 Electron/Qt
移动端开发 有 gomobile 但不主流
数据科学/AI Python 生态太强,Go 还在追赶
游戏开发 缺少成熟的游戏引擎
⚠️ 注意: Go 不是万能的。它最适合"需要高并发、高性能、易于部署"的场景。如果你的目标是数据分析或AI,Python 更合适。


4. Go vs 其他语言

对比维度 Go Python Java C++
类型系统 静态类型 动态类型 静态类型 静态类型
编译方式 编译型 解释型 编译+JVM 编译型
并发模型 goroutine(极轻量) GIL(受限) 线程(重量级) 线程(手动管理)
部署方式 单个二进制文件 需要运行环境 需要JVM 需要编译环境
学习曲线 平缓 最平缓 中等 陡峭
运行速度 中等 最快
开发效率 最高 中等
适用场景 云原生/微服务/CLI AI/数据科学/脚本 企业级应用 系统/游戏/嵌入式

5. 安装与验证

下载安装

访问 https://go.dev/dl/ 下载最新版本(推荐 Go 1.21+)。

Windows

  1. 下载 .msi 安装包,双击运行
  2. 安装程序会自动配置 GOROOTPATH
  3. 打开命令提示符验证:
BASH
go version

预期输出:

TEXT
go version go1.22.0 windows/amd64

macOS

BASH
# 使用 Homebrew
brew install go

# 或下载 .pkg 安装包

Linux

BASH
# 下载并解压
wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz

# 添加到 PATH(写入 ~/.bashrc 或 ~/.zshrc)
export PATH=$PATH:/usr/local/go/bin

# 验证
go version

环境变量

BASH
# 查看Go环境配置
go env

关键环境变量:

变量 说明 示例值
GOROOT Go安装路径 /usr/local/go
GOPATH 工作空间路径 ~/go
GOPROXY 模块代理 https://goproxy.cn(国内推荐)
💡 国内加速: 设置 Go 代理,下载依赖更快:

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

6. 第一个 Go 程序

Hello World

创建一个文件 hello.go

GO
package main

import "fmt"

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

运行:

BASH
go run hello.go

预期输出:

TEXT
Hello, Go!

代码解析

说明
package main 声明包名,main 包是程序入口
import "fmt" 导入 fmt 包,用于格式化输出
func main() 主函数,程序从这里开始执行
fmt.Println() 打印一行文字并换行
💡 Go 的特点: 你注意到了吗?Go 没有分号 ;,没有 class,没有 public static void main。这就是 Go 的简洁——用最少的代码做最多的事。

编译与运行

BASH
# 直接运行(开发时用)
go run hello.go

# 编译成二进制文件(部署时用)
go build -o hello hello.go

# 运行编译后的文件
./hello
💡 Go 的优势: go build 会生成一个独立的二进制文件,不需要安装任何运行时环境,直接拷到服务器就能运行。这是 Go 部署如此简单的原因。


常见应用场景

GO
package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, Go Web!")
    })
    http.ListenAndServe(":8080", nil)
}

运行后访问 http://localhost:8080 就能看到页面。

GO
package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    urls := []string{"url1", "url2", "url3"}

    for _, url := range urls {
        wg.Add(1)
        go func(u string) {
            defer wg.Done()
            fmt.Println("下载:", u)
        }(url)
    }
    wg.Wait()
    fmt.Println("全部下载完成")
}

这段代码会同时下载3个文件,而不是一个一个下载。这就是 Go 并发的威力。


❓ 常见问题

Q Go 和 Golang 是同一个东西吗?
A 是的。官方名字是 Go,但因为 "go" 这个词太常见,搜索引擎不好搜,所以社区常叫它 Golang。你搜 "golang" 能找到更多资源。
Q 学 Go 之前需要学什么语言吗?
A 不是必须的,但有其他语言基础(尤其是 Python 或 C)会更容易上手。Go 的语法非常简洁,零基础也能学,只是理解某些概念(如指针、并发)需要多花点时间。
Q Go 的泛型是什么时候加的?
A Go 1.18(2022年3月)正式引入泛型。之前的版本没有泛型,需要大量使用 interface{} 和类型断言。现在的 Go 已经支持泛型,但教程会先教你基础,泛型放在进阶内容中。
Q 国内用 Go 的公司多吗?
A 非常多。字节跳动(抖音/TikTok后端)、腾讯、B站、七牛云、PingCAP(TiDB)、蚂蚁集团等都在大量使用 Go。字节跳动是国内最大的 Go 语言用户之一。

📖 小节


📝 作业

  1. 基础题(难度⭐):安装 Go 并验证,在终端运行 go versiongo env,截图记录输出

  2. 进阶题(难度⭐⭐):编写一个 Go 程序,打印你的姓名、年龄、城市,以及一句"我正在学 Go!"

  3. 挑战题(难度⭐⭐⭐):修改上面的 Web 服务器示例,添加一个 /about 路由,访问时返回一段自我介绍


下一课

在下一课中,我们将学习变量与数据类型 — Go 中如何定义变量、有哪些数据类型、常量怎么用。

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏