文章

Day01(Golang 入门介绍)

golang 基础入门、golang hellworld

Day01(Golang 入门介绍)

Golang 基础

初步认识 Golang

Go 语言的特点

  • 跨平台编译: Go 支持 Linux、Windows、macOS 等多个平台,通过交叉编译可以轻松生成不同平台的可执行文件
  • 简洁高效: 语法简单清晰,学习曲线平缓,关键字仅 25 个
  • 原生并发: 内置 goroutine 和 channel,天生支持高并发编程
  • 自动垃圾回收: 内置 GC 机制,无需手动管理内存
  • 静态类型: 编译时类型检查,提高代码安全性
  • 快速编译: 编译速度快,接近解释型语言的体验
  • CGO 支持: 可以调用 C 语言代码,扩展性强

Go 的应用领域

  • Web 开发: Gin、Echo、Beego 等框架广泛用于后端服务开发
  • 微服务: gRPC、Go Micro 等支持构建分布式微服务架构
  • 云原生: Docker、Kubernetes、Prometheus 等云原生工具均用 Go 编写
  • 区块链: Hyperledger Fabric、Ethereum 等区块链项目
  • 大数据: 分布式数据处理、日志收集系统
  • 运维工具: Terraform、Consul、Etcd 等 DevOps 工具
  • 网络编程: 高性能代理、负载均衡器、消息队列

Go 环境

Linux & MacOs

  1. 下载 Golang 安装包:在 Golang 官方网站上下载适合自己 Linux 发行版和架构的 Golang 安装包
  2. 解压安装包:将下载的安装包解压到系统的某个目录下,如 /usr/local。

    1
    
    sudo tar -C /usr/local -xzf go*.tar.gz
    
  3. 配置环境变量:编辑 ~/.bashrc 或者 ~/.profile 文件,添加以下内容:

    1
    
    export PATH=$PATH:/usr/local/go/bin
    
  4. 使环境变量生效:执行以下命令使环境变量生效

    1
    
    source ~/.bashrc
    

    或者

    1
    
    source ~/.profile
    
  5. 检查安装:打开命令行终端,输入 go version 命令,如果输出 Golang 的版本号,则说明 Golang 安装成功

注意:不同的 Linux 发行版可能有所不同,以上是一个基本的安装步骤,具体步骤可以根据自己的情况进行调整

Windows 安装详解

方法一:安装包安装(推荐)

  1. 下载安装包: 访问 Golang 官方网站 下载 Windows 版本的 MSI 安装包
  2. 运行安装程序: 双击下载的 .msi 文件,按照向导完成安装
    • 默认安装路径: C:\Program Files\Go
    • 安装程序会自动配置环境变量
  3. 验证安装: 打开 PowerShell 或 CMD,执行:
    1
    
    go version
    

    如果显示版本号(如 go version go1.21.0 windows/amd64),说明安装成功

方法二:手动配置环境变量

如果安装后无法识别 go 命令,需要手动配置环境变量:

  1. 打开”控制面板” → “系统和安全” → “系统” → “高级系统设置”
  2. 点击”环境变量”按钮
  3. 在”系统变量”中找到 Path,点击”编辑”
  4. 添加 Go 的 bin 目录路径,例如: C:\Program Files\Go\bin
  5. 点击”确定”保存,重新打开终端窗口

注意: 配置环境变量后,需要重启终端才能生效

Go 环境变量详解

Go 的环境变量对开发和编译至关重要,以下是核心环境变量:

核心环境变量

变量名 说明 示例值
GOROOT Go 安装目录 C:\Program Files\Go
GOPATH 工作空间目录(Go 1.11 前必需) D:\gopath
GOBIN 可执行文件安装目录 $GOPATH/bin
GOOS 目标操作系统 windows, linux, darwin
GOARCH 目标架构 amd64, arm64, 386
CGO_ENABLED 是否启用 CGO 0(禁用), 1(启用)

Go Modules 相关(Go 1.11+)

变量名 说明 示例值
GO111MODULE Module 模式开关 on, off, auto
GOPROXY 模块代理地址 https://goproxy.cn,direct
GONOSUMDB 跳过校验的模块 github.com/private/*
GOFLAGS 默认编译标志 -mod=readonly

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
# 查看所有环境变量
go env

# 查看特定变量
go env GOPATH

# 设置环境变量(临时)
set GOOS=linux  # Windows
export GOOS=linux  # Linux/Mac

# 设置模块代理(加速国内下载)
go env -w GOPROXY=https://goproxy.cn,direct

建议: 中国大陆用户务必配置 GOPROXY,可显著提升依赖下载速度

Git 工具安装

Go 的模块管理依赖 Git 来下载代码包,确保已安装 Git:

1
2
3
4
# 检查 Git 是否安装
git --version

# 如果未安装,访问 https://git-scm.com/ 下载安装

推荐的开发工具

1. Visual Studio Code(免费,推荐)

  • 优点: 轻量、免费、插件丰富
  • 必备插件:
    • Go (by Google): 官方 Go 语言支持
    • Code Runner: 快速运行代码
  • 配置: 安装 Go 插件后,按 Ctrl+Shift+P → 输入 Go: Install/Update Tools 安装所有工具

2. GoLand(付费,专业)

  • 优点: JetBrains 出品,功能强大,智能提示完善
  • 适用场景: 大型项目开发,团队协作
  • 获取: https://www.jetbrains.com/go/

3. Vim/Neovim(轻量级)

  • 优点: 极致轻量,高度可定制
  • 插件: vim-go, coc.nvim
  • 适用人群: 熟悉 Vim 的高级用户

4. 其他编辑器

  • Sublime Text + GoSublime
  • Atom + go-plus
  • Emacs + go-mode

Golang HelloWorld 详解

创建第一个 Go 程序

步骤 1: 创建项目目录

1
2
3
4
5
6
# 创建工作目录
mkdir hello-world
cd hello-world

# 初始化 Go Module(推荐)
go mod init hello-world

步骤 2: 编写代码

创建 main.go 文件:

1
2
3
4
5
6
7
package main

import "fmt"

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

代码解析:

  • package main: 声明包名,main 包是可执行程序入口
  • import "fmt": 导入格式化输出包
  • func main(): 主函数,程序执行的起点
  • fmt.Println(): 打印字符串并换行

步骤 3: 运行程序

有三种方式运行 Go 程序:

方式 1: 直接运行(开发阶段推荐)

1
2
go run main.go
# 输出: Hello, World!

方式 2: 编译后运行(生产环境推荐)

1
2
3
4
5
6
# 编译为可执行文件
go build -o hello.exe

# 运行可执行文件
./hello.exe  # Linux/Mac
hello.exe    # Windows

方式 3: 安装到 GOPATH/bin

1
2
go install
# 可执行文件会安装到 $GOPATH/bin 或 $GOBIN 目录

交叉编译示例

Go 的强大之处在于可以轻松编译为不同平台的可执行文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 编译为 Linux 64位
go env -w GOOS=linux GOARCH=amd64
go build -o hello-linux

# 编译为 macOS
go env -w GOOS=darwin GOARCH=amd64
go build -o hello-macos

# 编译为 Windows
go env -w GOOS=windows GOARCH=amd64
go build -o hello.exe

# 恢复本地环境
go env -u GOOS GOARCH

Go 基础语法要点

1. 语句分隔符

Go 语言不需要在每行末尾加分号 ;,编译器会自动添加。但以下情况需要分号:

1
2
3
4
5
6
7
// 一行多条语句时需要分号
x := 1; y := 2; z := 3

// for 循环的三个表达式之间需要分号
for i := 0; i < 10; i++ {
    fmt.Println(i)
}

2. 注释规范

1
2
3
4
5
6
7
8
9
10
11
// 单行注释:用于简短说明

/*
多行注释:
用于较长的说明文档
*/

// 导出标识符的注释应该以标识符名称开头
type User struct {  // User 表示用户信息
    Name string
}

3. 标识符命名规则

  • 必须以字母或下划线开头,不能以数字开头
  • 区分大小写: nameName 是不同的标识符
  • 不能使用关键字: 见下方关键字列表
  • 可见性规则:
    • 首字母大写: 公开(Public),可被其他包访问
    • 首字母小写: 私有(Private),仅当前包内可见
1
2
3
4
5
6
7
// 公开的函数和变量
func GetName() string { }
var Version = "1.0.0"

// 私有的函数和变量
func calculate() int { }
var count int

4. Go 语言关键字(25个)

包管理(2个)

  • package: 声明包
  • import: 导入包

声明与定义(8个)

  • var: 声明变量
  • const: 声明常量
  • type: 定义类型
  • func: 声明函数
  • struct: 定义结构体
  • interface: 定义接口
  • map: 定义映射类型
  • chan: 定义通道类型

流程控制(15个)

  • if, else: 条件分支
  • switch, case, default: 多分支选择
  • for: 循环
  • range: 遍历集合
  • break: 跳出循环
  • continue: 继续下一次循环
  • goto: 跳转到标签
  • return: 返回函数
  • defer: 延迟执行
  • go: 启动协程
  • select: 通道选择
  • fallthrough: switch 穿透

5. 预定义标识符(36个)

基本类型

  • bool, byte, rune, string
  • int, int8, int16, int32, int64
  • uint, uint8, uint16, uint32, uint64, uintptr
  • float32, float64
  • complex64, complex128

常量和零值

  • true, false, nil, iota

内置函数

  • append, cap, close, copy, delete
  • len, make, new, panic, recover
  • print, println, real, imag, complex

6. 编码规范与最佳实践

代码风格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// ✅ 推荐:运算符两侧加空格
result := a + b * c

// ❌ 避免:缺少空格,可读性差
result:=a+b*c

// ✅ 推荐:使用 gofmt 格式化代码
gofmt -w filename.go

// ✅ 推荐:变量命名使用驼峰式
userName := "Alice"
userID := 123

// ✅ 推荐:短变量名在局部作用域
for i := 0; i < 10; i++ {
    // i 的含义很明显
}

// ❌ 避免:未使用的变量(编译错误)
x := 10  // 如果 x 未使用,编译会失败

常见编译错误

1
2
3
4
5
6
7
8
9
10
11
// 错误 1: 未使用的变量
func test() {
    x := 10  // compilation error: x declared and not used
}

// 错误 2: 未使用的导入
import "os"  // compilation error: "os" imported and not used

// 解决方法:使用 _ 忽略
_ = x
import _ "os"

Go 学习路线与知识体系

基础知识体系

第一阶段:语言基础

  1. 数据类型: 整型、浮点型、布尔型、字符串、复数
  2. 变量与常量: 声明、初始化、作用域、iota 枚举
  3. 运算符: 算术、关系、逻辑、位运算
  4. 控制流程: if-else、switch-case、for 循环、break/continue
  5. 函数: 参数传递、返回值、可变参数、匿名函数、闭包
  6. 数组与切片: 声明、初始化、切片操作、扩容机制
  7. Map: 创建、增删改查、遍历、并发安全
  8. 结构体: 定义、方法、继承、JSON 序列化
  9. 指针: 基本概念、指针运算、内存管理
  10. 接口: 定义、实现、类型断言、空接口

第二阶段:高级特性

  1. 错误处理: error 接口、panic/recover、自定义错误
  2. 并发编程: goroutine、channel、sync 包、context
  3. 反射: reflect 包、类型检查、动态调用
  4. 测试: 单元测试、基准测试、表格驱动测试
  5. 标准库: io、net/http、encoding/json、time、os

第三阶段:工程实践

  1. Go Modules: 依赖管理、版本控制、私有仓库
  2. 项目结构: 标准布局、分层架构、设计模式
  3. 性能优化: 内存分配、GC 调优、profile 分析
  4. Web 开发: HTTP 服务器、路由、中间件、RESTful API
  5. 数据库: SQL、ORM、连接池、事务处理

Go 语言核心特性总结

1. 简洁的语法

Go 刻意保持语法简洁,只有 25 个关键字,降低了学习成本。相比其他语言:

  • 没有类(class)、继承、泛型(Go 1.18 前)
  • 没有异常处理(try-catch),使用 error 返回值
  • 没有复杂的元编程能力

2. 强大的并发模型

Go 的并发基于 CSP(Communicating Sequential Processes)理论:

1
2
3
4
5
6
7
8
9
// 传统多线程(复杂、易出错)
// Java/C++: Thread, Lock, Mutex, Condition...

// Go 的并发(简洁、安全)
ch := make(chan int)
go func() {
    ch <- compute()
}()
result := <-ch

3. 自动内存管理

  • 垃圾回收(GC): 自动回收不再使用的内存
  • 逃逸分析: 编译器决定变量分配在栈还是堆
  • 内存分配器: tcmalloc 改进版,高效分配小对象

4. 快速的编译速度

  • 编译速度接近解释型语言
  • 依赖分析优化,只编译变更的部分
  • 适合快速迭代开发

5. 丰富的标准库

Go 提供了”电池included”的标准库:

  • net/http: 完整的 HTTP 客户端和服务器
  • encoding/json: JSON 编解码
  • database/sql: 数据库抽象层
  • crypto: 加密算法
  • testing: 测试框架

学习资源推荐

官方资源

  • Go 官网: https://go.dev/
  • Go 官方博客: https://go.dev/blog/
  • Go Tour: https://go.dev/tour/ (交互式教程)
  • Effective Go: https://go.dev/doc/effective_go (最佳实践)

中文资源

  • Go 语言中文网: https://studygolang.com/
  • Go 语言圣经: https://books.studygolang.com/gopl-zh/
  • Go 夜读: https://talks.godoc.org/ (社区技术分享)

书籍推荐

  • 《The Go Programming Language》(Go 语言圣经)
  • 《Go in Action》(Go 实战)
  • 《Concurrency in Go》(Go 并发编程)
  • 《Go 语言设计与实现》

学习资源推荐

官方资源

  • Go 官网: https://go.dev/
  • Go 官方博客: https://go.dev/blog/
  • Go Tour: https://go.dev/tour/ (交互式教程)
  • Effective Go: https://go.dev/doc/effective_go (最佳实践)

中文资源

  • Go 语言中文网: https://studygolang.com/
  • Go 语言圣经: https://books.studygolang.com/gopl-zh/
  • Go 夜读: https://talks.godoc.org/ (社区技术分享)

书籍推荐

  • 《The Go Programming Language》(Go 语言圣经)
  • 《Go in Action》(Go 实战)
  • 《Concurrency in Go》(Go 并发编程)
  • 《Go 语言设计与实现》

下一步

完成入门后,建议按照以下顺序深入学习:

  1. ✅ Day01: Golang 入门介绍(本文)
  2. ➡️ Day02: 数据类型、变量、常量
  3. ➡️ Day03: 运算符与条件语句
  4. ➡️ Day04: 循环语句与函数基础
  5. ➡️ Day05: 函数进阶(闭包、递归、defer)
  6. ➡️ Day06: 变量作用域与数组
  7. ➡️ Day07: 指针与结构体
  8. ➡️ Day08: 切片与 range 遍历
  9. ➡️ Day09: Map 与容器
  10. ➡️ Day10: 接口与错误处理
  11. ➡️ Day11: 并发编程
  12. ➡️ Day12: 反射机制
  13. ➡️ Day13: 时间处理
  14. ➡️ Day14: 测试框架

祝你在 Go 语言的学习之路上取得成功!🚀

本文由作者按照 CC BY 4.0 进行授权